You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Patrick Klein <pa...@bi-so.de> on 2006/11/30 12:27:23 UTC

Tapestry 4.1.1, Problems with IE and AJAX

Hello!

I'm still having some trouble with my test-application and IE.

The intended functionality is the following:
Page consists out of three PropertySelections, one TextField and one 
Checkbox.

PropertySelection 1 affects the content of PropertySelection 2 and 
possibly the content of PropertySelection 3
PropertySelection 2 affects the content of PropertySelection 3
PropertySeleciton 3 affects both TextField and Checkbox.

Using Firefox, the components get updated as they should.
However, using IE doesn't work. The EventListener gets called on the 
first change of Selection 1, but the other Components don't get updated. 
If i change the value of that Selection again, the application crashes 
before the EventListener is called. Additionally the (should be) 
affected PropertySelections don't get updated during the run of the 
EventListener. If there was a working Selection before in one of the 
affected Selections, these are gone after the first EventListener-call 
as well.

I'm using last nights svn-snapshot of Tapestry for testing.

Did i miss something or is there really a problem with Tapestry411/AJAX 
and IE?

Patrick

----------- Test Page -----------------

The html-template looks like this:

<html jwcid="@Shell" title="TestPage">
    <body jwcid="@Body">
        <h1>Test...</h1>

        <form jwcid="buttonForm@Form">
            Page Counter: <div jwcid="@Insert" value="ognl:counter"/>
            <div jwcid="button@Submit" id="button" 
listener="listener:button" value="Press Me"/>
        </form>
           
        <form jwcid="testFormSingle@Form" async="ognl:true" 
updateComponents="ognl:updateComponentsSingle">
            <br/><br/>
            <br/><br/>

            <div jwcid="@PropertySelection" id="testSelection" 
model="ognl:testModel" value="ognl:test"/>&nbsp;
            <div jwcid="@PropertySelection" id="resultSelection" 
model="ognl:resultModel" value="ognl:result"/>&nbsp;
            <div jwcid="@PropertySelection" id="targetSelection" 
model="ognl:targetModel" value="ognl:target"/>&nbsp;
            <div jwcid="@Any" id="updateMe">
                <div jwcid="@TextField" id="output" value="ognl:output"/>
            </div>
            <div jwcid="@Any" id="updateBool">
                <div jwcid="@Checkbox" id="outBool" value="ognl:outBool" 
disabled="ognl:true"/>
            </div>
            <br/><br/>
            <br/><br/>
           
           
        </form>
        <span jwcid="@contrib:InspectorButton" disabled="ognl:false"/>   
    </body>
</html>

The Java-class has the following content:

package test;

import java.util.ArrayList;
import java.util.List;

import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.EventListener;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.event.BrowserEvent;
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.form.IPropertySelectionModel;
import org.apache.tapestry.html.BasePage;

public abstract class Home extends BasePage implements 
PageBeginRenderListener {

    public void pageBeginRender(PageEvent event) {
        if (getResultModel() == null) {
            fillResultModel();
        }
        if (getTargetModel() == null) {
            fillTargetModel();
        }
    }

    public String getCallingElementId(BrowserEvent event) {
        return (String) event.getTarget().get(BrowserEvent.TARGET_ATTR_ID);
    }

    // /////////////////////////////////////////////
    // generate/build the needed Selection-Models //
    // /////////////////////////////////////////////

    public void fillResultModel() {
        setResultModel(getResultModel(getTest()));
    }

    public IPropertySelectionModel getResultModel(Test test) {
        List<Enum> resultingList = new ArrayList<Enum>();
        resultingList.add(null);
        if (test != null) {
            switch (test) {
            case TEST1:
                resultingList.add(Result.RESULT1);
                resultingList.add(Result.RESULT3);
                break;
            case TEST2:
                resultingList.add(Result.RESULT2);
                resultingList.add(Result.RESULT4);
                break;
            case TEST3:
                resultingList.add(Result.RESULT3);
                resultingList.add(Result.RESULT1);
                break;
            case TEST4:
                resultingList.add(Result.RESULT4);
                resultingList.add(Result.RESULT2);
                break;
            }
        }
        return new EnumerationSelectionModel(resultingList
                .toArray(new Enum[resultingList.size()]));
    }

    public IPropertySelectionModel getTestModel() {
        List<Enum> resultingList = new ArrayList<Enum>();
        resultingList.add(null);
        Enum[] temp = Test.values();
        for (int i = 0; i < temp.length; i++) {
            resultingList.add(temp[i]);
        }
        return new EnumerationSelectionModel(resultingList
                .toArray(new Enum[resultingList.size()]));
    }

    public void fillTargetModel() {
        if (!Result.RESULT4.equals(getResult())) {
            setOutput(null);
            setOutBool(false);
        }
        setTargetModel(getTargetModel(getResult()));
    }

    public IPropertySelectionModel getTargetModel(Result result) {
        List<Enum> resultingList = new ArrayList<Enum>();
        resultingList.add(null);
        if (Result.RESULT4.equals(result)) {
            Enum[] temp = Target.values();
            for (int i = 0; i < temp.length; i++) {
                resultingList.add(temp[i]);
            }
        } else {
            setOutput(null);
        }
        return new EnumerationSelectionModel(resultingList
                .toArray(new Enum[resultingList.size()]));
    }

    // ///////////////////////////////////////////////////////////////
    // Event Listener for the Single Data Case (working, except IE) //
    // ///////////////////////////////////////////////////////////////

    @EventListener(elements = "testSelection", events = "onchange", 
submitForm = "testFormSingle", async = true)
    public void adjustResultModel(BrowserEvent event) {
        System.out.println("adjustResultModel called. Counter = "
                + getCounter());
        if (getTest() == null) {
            setResult(null);
        } else {
            switch (getTest()) {
            case TEST1:
            case TEST3:
                if (Result.RESULT2.equals(getResult())
                        || Result.RESULT4.equals(getResult())) {
                    setResult(null);
                }
                setTarget(null);
                break;
            case TEST2:
            case TEST4:
                if (Result.RESULT1.equals(getResult())
                        || Result.RESULT3.equals(getResult())) {
                    setResult(null);
                }
                if (!Result.RESULT4.equals(getResult())) {
                    setResult(null);
                }
                break;
            }
        }
        fillResultModel();
        fillTargetModel();
        getRequestCycle().getResponseBuilder().updateComponent(
                "resultSelection");
        getRequestCycle().getResponseBuilder().updateComponent(
                "targetSelection");
        if (getCounter() == null) {
            setCounter(0);
        } else {
            Integer counter = getCounter();
            counter++;
            setCounter(counter);
        }
    }

    @EventListener(elements = "resultSelection", events = "onchange", 
submitForm = "testFormSingle", async = true)
    public void adjustTargetModel(BrowserEvent event) {
        System.out.println("adjustTargetModel called. Counter = "
                + getCounter());
        // update TargetSeleections
        fillTargetModel();
        getRequestCycle().getResponseBuilder().updateComponent(
                "targetSelection");
        // getRequestCycle().getResponseBuilder().updateComponent("output");
        getRequestCycle().getResponseBuilder().updateComponent("updateMe");
        
getRequestCycle().getResponseBuilder().updateComponent("updateBool");
        // 
getRequestCycle().getResponseBuilder().updateComponent("myFavoriteDiv");
        if (getCounter() == null) {
            setCounter(0);
        } else {
            Integer counter = getCounter();
            counter++;
            setCounter(counter);
        }
    }

    @EventListener(elements = "targetSelection", events = "onchange", 
submitForm = "testFormSingle", async = true)
    public void adjustOutput() {
        System.out.println("adjustOutput called. Counter = " + 
getCounter());
        // update TargetSeleections
        if (getTarget() == null) {
            setOutput(null);
            setOutBool(false);
        } else {
            setOutput(getTarget().toString());
            setOutBool(Target.RI1.equals(getTarget()));
        }
        // getRequestCycle().getResponseBuilder().updateComponent("output");
        getRequestCycle().getResponseBuilder().updateComponent("updateMe");
        
getRequestCycle().getResponseBuilder().updateComponent("updateBool");
        // 
getRequestCycle().getResponseBuilder().updateComponent("myFavoriteDiv");
        if (getCounter() == null) {
            setCounter(0);
        } else {
            Integer counter = getCounter();
            counter++;
            setCounter(counter);
        }
    }

    public void button(IRequestCycle cycle) {
        System.out.println("Button has been pressed");
        if (getCounter() == null) {
            setCounter(0);
        } else {
            Integer counter = getCounter();
            counter++;
            setCounter(counter);
        }
        // should only update the data
        return;
    }

    public String[] getUpdateComponentsSingle() {
        List<String> componentList = new ArrayList<String>();
        componentList.add("resultSelection");
        componentList.add("targetSelection");
        componentList.add("output");
        componentList.add("updateMe");
        componentList.add("outBool");
        componentList.add("updateBool");
        return componentList.toArray(new String[componentList.size()]);
    }

    // Iterator used
    @Persist
    public abstract Integer getCounter();

    public abstract void setCounter(Integer counter);


    public abstract IPropertySelectionModel getResultModel();

    public abstract void setResultModel(IPropertySelectionModel model);

    public abstract IPropertySelectionModel getTargetModel();

    public abstract void setTargetModel(IPropertySelectionModel model);

   
    @Persist
    public abstract Test getTest();

    public abstract void setTest(Test test);

    @Persist
    public abstract Result getResult();

    public abstract void setResult(Result test);

    public abstract Target getTarget();

    public abstract void setTarget(Target target);

    public abstract String getOutput();

    public abstract void setOutput(String output);

    public abstract boolean getOutBool();

    public abstract void setOutBool(boolean bool);

}

The page-file only contains the class-definition.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tapestry 4.1.1, Problems with IE and AJAX [update]

Posted by Jesse Kuhnert <jk...@gmail.com>.
The var =<foo> error is something I fixed over the weekend.

On 12/4/06, Patrick Klein <pa...@bi-so.de> wrote:
> Hi!
>
> Last fridays SVN-Snapshot gives me the following error using firefox
> when changing one of the components an eventlistener is attached to:
>
> ERROR: 10:43:16: Error evaluating script: //<![CDATA[ var
> tapestry._preload = new Array(); if (document.images) {
> tapestry._preload[0] = new Image(); tapestry._preload[0].src =
<snipped>

-- 
Jesse Kuhnert
Tapestry/Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tapestry 4.1.1, Problems with IE and AJAX [update]

Posted by Patrick Klein <pa...@bi-so.de>.
Hi!

Last fridays SVN-Snapshot gives me the following error using firefox 
when changing one of the components an eventlistener is attached to:

ERROR: 10:43:16: Error evaluating script: //<![CDATA[ var 
tapestry._preload = new Array(); if (document.images) { 
tapestry._preload[0] = new Image(); tapestry._preload[0].src = 
"/HelloWorld/app?service=asset&path=%2Forg%2Fapache%2Ftapestry%2Fcontrib%2Finspector%2Finspector-rollover.gif"; 
tapestry._preload[1] = new Image(); tapestry._preload[1].src = 
"/HelloWorld/app?service=asset&path=%2Forg%2Fapache%2Ftapestry%2Fcontrib%2Finspector%2Ftapestry-logo.gif";} 
function popup_window() { var newWindow = 
window.open('/HelloWorld/app?component=%24InspectorButton.link&page=Home&service=direct&session=T', 
'TapestryInspector', 
'titlebar,resizable,scrollbars,width=700,height=600'); 
newWindow.focus(); } tapestry.mouseOver_rollover=function(){ if 
(document.images){ dojo.byId('rollover').src = tapestry._preload[0].src; 
} } tapestry.mouseOut_rollover=function(){ if (document.images) { 
dojo.byId('rollover').src = tapestry._preload[1].src; } } 
dojo.require("tapestry.event"); //]]> SyntaxError : missing ; before 
statement : 
http://localhost:8080/HelloWorld/app?service=asset&path=%2Ftapestry%2Fcore.js 
: line 256

(this or a similar exception comes for every updated component)

Still the test-application works as it should (at least in firefox)

IE shows a similar message but still an exception is caused on the 
second update

This mornings tapestry-snapshot (and svn-version, too) crashes the 
test-app on start with the follwing exception(s):

javax.servlet.ServletException: Unable to construct service tapestry.enhance.ComponentConstructorFactory: Error building service tapestry.enhance.ComponentConstructorFactory: Failure invoking constructor for class org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl: edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock
	org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:60)
	$ServletRequestServicer_10f4ce38a3c.service($ServletRequestServicer_10f4ce38a3c.java)
	$ServletRequestServicer_10f4ce38a3b.service($ServletRequestServicer_10f4ce38a3b.java)
	org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
	$ServletRequestServicerFilter_10f4ce38a38.service($ServletRequestServicerFilter_10f4ce38a38.java)
	$ServletRequestServicerFilter_10f4ce38a37.service($ServletRequestServicerFilter_10f4ce38a37.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
	$ServletRequestServicerFilter_10f4ce38a36.service($ServletRequestServicerFilter_10f4ce38a36.java)
	$ServletRequestServicerFilter_10f4ce38a35.service($ServletRequestServicerFilter_10f4ce38a35.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
	$ServletRequestServicerFilter_10f4ce38a3a.service($ServletRequestServicerFilter_10f4ce38a3a.java)
	$ServletRequestServicerFilter_10f4ce38a39.service($ServletRequestServicerFilter_10f4ce38a39.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	$ServletRequestServicer_10f4ce38a30.service($ServletRequestServicer_10f4ce38a30.java)
	$ServletRequestServicer_10f4ce38a2f.service($ServletRequestServicer_10f4ce38a2f.java)
	org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
	org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:104)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause:

org.apache.hivemind.ApplicationRuntimeException: Unable to construct service tapestry.enhance.ComponentConstructorFactory: Error building service tapestry.enhance.ComponentConstructorFactory: Failure invoking constructor for class org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl: edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock [jar:file:/home/klein/bi-so/TapestryTest/context/WEB-INF/lib/tapestry-framework-4.1.1-SNAPSHOT.jar!/META-INF/tapestry.enhance.xml, line 27, column 21]
	org.apache.tapestry.error.ExceptionPresenterImpl.presentException(ExceptionPresenterImpl.java:66)
	$ExceptionPresenter_10f4ce38a00.presentException($ExceptionPresenter_10f4ce38a00.java)
	$ExceptionPresenter_10f4ce389ff.presentException($ExceptionPresenter_10f4ce389ff.java)
	org.apache.tapestry.engine.AbstractEngine.activateExceptionPage(AbstractEngine.java:126)
	org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:276)
	org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60)
	$WebRequestServicer_10f4ce38a5a.service($WebRequestServicer_10f4ce38a5a.java)
	$WebRequestServicer_10f4ce38a59.service($WebRequestServicer_10f4ce38a59.java)
	$WebRequestServicer_10f4ce38a56.service($WebRequestServicer_10f4ce38a56.java)
	$WebRequestServicer_10f4ce38a55.service($WebRequestServicer_10f4ce38a55.java)
	org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56)
	$ServletRequestServicer_10f4ce38a3c.service($ServletRequestServicer_10f4ce38a3c.java)
	$ServletRequestServicer_10f4ce38a3b.service($ServletRequestServicer_10f4ce38a3b.java)
	org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
	$ServletRequestServicerFilter_10f4ce38a38.service($ServletRequestServicerFilter_10f4ce38a38.java)
	$ServletRequestServicerFilter_10f4ce38a37.service($ServletRequestServicerFilter_10f4ce38a37.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
	$ServletRequestServicerFilter_10f4ce38a36.service($ServletRequestServicerFilter_10f4ce38a36.java)
	$ServletRequestServicerFilter_10f4ce38a35.service($ServletRequestServicerFilter_10f4ce38a35.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
	$ServletRequestServicerFilter_10f4ce38a3a.service($ServletRequestServicerFilter_10f4ce38a3a.java)
	$ServletRequestServicerFilter_10f4ce38a39.service($ServletRequestServicerFilter_10f4ce38a39.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	$ServletRequestServicer_10f4ce38a30.service($ServletRequestServicer_10f4ce38a30.java)
	$ServletRequestServicer_10f4ce38a2f.service($ServletRequestServicer_10f4ce38a2f.java)
	org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
	org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:104)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause:

org.apache.hivemind.ApplicationRuntimeException: Unable to construct service tapestry.enhance.ComponentConstructorFactory: Error building service tapestry.enhance.ComponentConstructorFactory: Failure invoking constructor for class org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl: edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock [jar:file:/home/klein/bi-so/TapestryTest/context/WEB-INF/lib/tapestry-framework-4.1.1-SNAPSHOT.jar!/META-INF/tapestry.enhance.xml, line 27, column 21]
	org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructNewServiceImplementation(AbstractServiceModelImpl.java:166)
	org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructServiceImplementation(AbstractServiceModelImpl.java:140)
	org.apache.hivemind.impl.servicemodel.SingletonServiceModel.getActualServiceImplementation(SingletonServiceModel.java:69)
	$ComponentConstructorFactory_10f4ce38a99._service($ComponentConstructorFactory_10f4ce38a99.java)
	$ComponentConstructorFactory_10f4ce38a99.getComponentConstructor($ComponentConstructorFactory_10f4ce38a99.java)
	$ComponentConstructorFactory_10f4ce38a98.getComponentConstructor($ComponentConstructorFactory_10f4ce38a98.java)
	org.apache.tapestry.pageload.PageLoader.instantiatePage(PageLoader.java:564)
	org.apache.tapestry.pageload.PageLoader.loadPage(PageLoader.java:591)
	$IPageLoader_10f4ce38a92.loadPage($IPageLoader_10f4ce38a92.java)
	$IPageLoader_10f4ce38a93.loadPage($IPageLoader_10f4ce38a93.java)
	org.apache.tapestry.pageload.PageSource.getPage(PageSource.java:119)
	$IPageSource_10f4ce389f3.getPage($IPageSource_10f4ce389f3.java)
	org.apache.tapestry.engine.RequestCycle.loadPage(RequestCycle.java:248)
	org.apache.tapestry.engine.RequestCycle.getPage(RequestCycle.java:235)
	org.apache.tapestry.error.ExceptionPresenterImpl.presentException(ExceptionPresenterImpl.java:42)
	$ExceptionPresenter_10f4ce38a00.presentException($ExceptionPresenter_10f4ce38a00.java)
	$ExceptionPresenter_10f4ce389ff.presentException($ExceptionPresenter_10f4ce389ff.java)
	org.apache.tapestry.engine.AbstractEngine.activateExceptionPage(AbstractEngine.java:126)
	org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:276)
	org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60)
	$WebRequestServicer_10f4ce38a5a.service($WebRequestServicer_10f4ce38a5a.java)
	$WebRequestServicer_10f4ce38a59.service($WebRequestServicer_10f4ce38a59.java)
	$WebRequestServicer_10f4ce38a56.service($WebRequestServicer_10f4ce38a56.java)
	$WebRequestServicer_10f4ce38a55.service($WebRequestServicer_10f4ce38a55.java)
	org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56)
	$ServletRequestServicer_10f4ce38a3c.service($ServletRequestServicer_10f4ce38a3c.java)
	$ServletRequestServicer_10f4ce38a3b.service($ServletRequestServicer_10f4ce38a3b.java)
	org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
	$ServletRequestServicerFilter_10f4ce38a38.service($ServletRequestServicerFilter_10f4ce38a38.java)
	$ServletRequestServicerFilter_10f4ce38a37.service($ServletRequestServicerFilter_10f4ce38a37.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
	$ServletRequestServicerFilter_10f4ce38a36.service($ServletRequestServicerFilter_10f4ce38a36.java)
	$ServletRequestServicerFilter_10f4ce38a35.service($ServletRequestServicerFilter_10f4ce38a35.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
	$ServletRequestServicerFilter_10f4ce38a3a.service($ServletRequestServicerFilter_10f4ce38a3a.java)
	$ServletRequestServicerFilter_10f4ce38a39.service($ServletRequestServicerFilter_10f4ce38a39.java)
	$ServletRequestServicer_10f4ce38a3d.service($ServletRequestServicer_10f4ce38a3d.java)
	$ServletRequestServicer_10f4ce38a30.service($ServletRequestServicer_10f4ce38a30.java)
	$ServletRequestServicer_10f4ce38a2f.service($ServletRequestServicer_10f4ce38a2f.java)
	org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
	org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:104)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

[...]

Patrick
> Hello!
>
> I'm still having some trouble with my test-application and IE.
>
> The intended functionality is the following:
> Page consists out of three PropertySelections, one TextField and one 
> Checkbox.
>
> PropertySelection 1 affects the content of PropertySelection 2 and 
> possibly the content of PropertySelection 3
> PropertySelection 2 affects the content of PropertySelection 3
> PropertySeleciton 3 affects both TextField and Checkbox.
>
> Using Firefox, the components get updated as they should.
> However, using IE doesn't work. The EventListener gets called on the 
> first change of Selection 1, but the other Components don't get 
> updated. If i change the value of that Selection again, the 
> application crashes before the EventListener is called. Additionally 
> the (should be) affected PropertySelections don't get updated during 
> the run of the EventListener. If there was a working Selection before 
> in one of the affected Selections, these are gone after the first 
> EventListener-call as well.
>
> I'm using last nights svn-snapshot of Tapestry for testing.
>
> Did i miss something or is there really a problem with 
> Tapestry411/AJAX and IE?
>
> Patrick
>
> ----------- Test Page -----------------
>
> The html-template looks like this:
>
> <html jwcid="@Shell" title="TestPage">
>    <body jwcid="@Body">
>        <h1>Test...</h1>
>
>        <form jwcid="buttonForm@Form">
>            Page Counter: <div jwcid="@Insert" value="ognl:counter"/>
>            <div jwcid="button@Submit" id="button" 
> listener="listener:button" value="Press Me"/>
>        </form>
>                  <form jwcid="testFormSingle@Form" async="ognl:true" 
> updateComponents="ognl:updateComponentsSingle">
>            <br/><br/>
>            <br/><br/>
>
>            <div jwcid="@PropertySelection" id="testSelection" 
> model="ognl:testModel" value="ognl:test"/>&nbsp;
>            <div jwcid="@PropertySelection" id="resultSelection" 
> model="ognl:resultModel" value="ognl:result"/>&nbsp;
>            <div jwcid="@PropertySelection" id="targetSelection" 
> model="ognl:targetModel" value="ognl:target"/>&nbsp;
>            <div jwcid="@Any" id="updateMe">
>                <div jwcid="@TextField" id="output" value="ognl:output"/>
>            </div>
>            <div jwcid="@Any" id="updateBool">
>                <div jwcid="@Checkbox" id="outBool" 
> value="ognl:outBool" disabled="ognl:true"/>
>            </div>
>            <br/><br/>
>            <br/><br/>
>                            </form>
>        <span jwcid="@contrib:InspectorButton" 
> disabled="ognl:false"/>      </body>
> </html>
>
> The Java-class has the following content:
>
> package test;
>
> import java.util.ArrayList;
> import java.util.List;
>
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.annotations.EventListener;
> import org.apache.tapestry.annotations.Persist;
> import org.apache.tapestry.event.BrowserEvent;
> import org.apache.tapestry.event.PageBeginRenderListener;
> import org.apache.tapestry.event.PageEvent;
> import org.apache.tapestry.form.IPropertySelectionModel;
> import org.apache.tapestry.html.BasePage;
>
> public abstract class Home extends BasePage implements 
> PageBeginRenderListener {
>
>    public void pageBeginRender(PageEvent event) {
>        if (getResultModel() == null) {
>            fillResultModel();
>        }
>        if (getTargetModel() == null) {
>            fillTargetModel();
>        }
>    }
>
>    public String getCallingElementId(BrowserEvent event) {
>        return (String) 
> event.getTarget().get(BrowserEvent.TARGET_ATTR_ID);
>    }
>
>    // /////////////////////////////////////////////
>    // generate/build the needed Selection-Models //
>    // /////////////////////////////////////////////
>
>    public void fillResultModel() {
>        setResultModel(getResultModel(getTest()));
>    }
>
>    public IPropertySelectionModel getResultModel(Test test) {
>        List<Enum> resultingList = new ArrayList<Enum>();
>        resultingList.add(null);
>        if (test != null) {
>            switch (test) {
>            case TEST1:
>                resultingList.add(Result.RESULT1);
>                resultingList.add(Result.RESULT3);
>                break;
>            case TEST2:
>                resultingList.add(Result.RESULT2);
>                resultingList.add(Result.RESULT4);
>                break;
>            case TEST3:
>                resultingList.add(Result.RESULT3);
>                resultingList.add(Result.RESULT1);
>                break;
>            case TEST4:
>                resultingList.add(Result.RESULT4);
>                resultingList.add(Result.RESULT2);
>                break;
>            }
>        }
>        return new EnumerationSelectionModel(resultingList
>                .toArray(new Enum[resultingList.size()]));
>    }
>
>    public IPropertySelectionModel getTestModel() {
>        List<Enum> resultingList = new ArrayList<Enum>();
>        resultingList.add(null);
>        Enum[] temp = Test.values();
>        for (int i = 0; i < temp.length; i++) {
>            resultingList.add(temp[i]);
>        }
>        return new EnumerationSelectionModel(resultingList
>                .toArray(new Enum[resultingList.size()]));
>    }
>
>    public void fillTargetModel() {
>        if (!Result.RESULT4.equals(getResult())) {
>            setOutput(null);
>            setOutBool(false);
>        }
>        setTargetModel(getTargetModel(getResult()));
>    }
>
>    public IPropertySelectionModel getTargetModel(Result result) {
>        List<Enum> resultingList = new ArrayList<Enum>();
>        resultingList.add(null);
>        if (Result.RESULT4.equals(result)) {
>            Enum[] temp = Target.values();
>            for (int i = 0; i < temp.length; i++) {
>                resultingList.add(temp[i]);
>            }
>        } else {
>            setOutput(null);
>        }
>        return new EnumerationSelectionModel(resultingList
>                .toArray(new Enum[resultingList.size()]));
>    }
>
>    // ///////////////////////////////////////////////////////////////
>    // Event Listener for the Single Data Case (working, except IE) //
>    // ///////////////////////////////////////////////////////////////
>
>    @EventListener(elements = "testSelection", events = "onchange", 
> submitForm = "testFormSingle", async = true)
>    public void adjustResultModel(BrowserEvent event) {
>        System.out.println("adjustResultModel called. Counter = "
>                + getCounter());
>        if (getTest() == null) {
>            setResult(null);
>        } else {
>            switch (getTest()) {
>            case TEST1:
>            case TEST3:
>                if (Result.RESULT2.equals(getResult())
>                        || Result.RESULT4.equals(getResult())) {
>                    setResult(null);
>                }
>                setTarget(null);
>                break;
>            case TEST2:
>            case TEST4:
>                if (Result.RESULT1.equals(getResult())
>                        || Result.RESULT3.equals(getResult())) {
>                    setResult(null);
>                }
>                if (!Result.RESULT4.equals(getResult())) {
>                    setResult(null);
>                }
>                break;
>            }
>        }
>        fillResultModel();
>        fillTargetModel();
>        getRequestCycle().getResponseBuilder().updateComponent(
>                "resultSelection");
>        getRequestCycle().getResponseBuilder().updateComponent(
>                "targetSelection");
>        if (getCounter() == null) {
>            setCounter(0);
>        } else {
>            Integer counter = getCounter();
>            counter++;
>            setCounter(counter);
>        }
>    }
>
>    @EventListener(elements = "resultSelection", events = "onchange", 
> submitForm = "testFormSingle", async = true)
>    public void adjustTargetModel(BrowserEvent event) {
>        System.out.println("adjustTargetModel called. Counter = "
>                + getCounter());
>        // update TargetSeleections
>        fillTargetModel();
>        getRequestCycle().getResponseBuilder().updateComponent(
>                "targetSelection");
>        // 
> getRequestCycle().getResponseBuilder().updateComponent("output");
>        
> getRequestCycle().getResponseBuilder().updateComponent("updateMe");
>        
> getRequestCycle().getResponseBuilder().updateComponent("updateBool");
>        // 
> getRequestCycle().getResponseBuilder().updateComponent("myFavoriteDiv");
>        if (getCounter() == null) {
>            setCounter(0);
>        } else {
>            Integer counter = getCounter();
>            counter++;
>            setCounter(counter);
>        }
>    }
>
>    @EventListener(elements = "targetSelection", events = "onchange", 
> submitForm = "testFormSingle", async = true)
>    public void adjustOutput() {
>        System.out.println("adjustOutput called. Counter = " + 
> getCounter());
>        // update TargetSeleections
>        if (getTarget() == null) {
>            setOutput(null);
>            setOutBool(false);
>        } else {
>            setOutput(getTarget().toString());
>            setOutBool(Target.RI1.equals(getTarget()));
>        }
>        // 
> getRequestCycle().getResponseBuilder().updateComponent("output");
>        
> getRequestCycle().getResponseBuilder().updateComponent("updateMe");
>        
> getRequestCycle().getResponseBuilder().updateComponent("updateBool");
>        // 
> getRequestCycle().getResponseBuilder().updateComponent("myFavoriteDiv");
>        if (getCounter() == null) {
>            setCounter(0);
>        } else {
>            Integer counter = getCounter();
>            counter++;
>            setCounter(counter);
>        }
>    }
>
>    public void button(IRequestCycle cycle) {
>        System.out.println("Button has been pressed");
>        if (getCounter() == null) {
>            setCounter(0);
>        } else {
>            Integer counter = getCounter();
>            counter++;
>            setCounter(counter);
>        }
>        // should only update the data
>        return;
>    }
>
>    public String[] getUpdateComponentsSingle() {
>        List<String> componentList = new ArrayList<String>();
>        componentList.add("resultSelection");
>        componentList.add("targetSelection");
>        componentList.add("output");
>        componentList.add("updateMe");
>        componentList.add("outBool");
>        componentList.add("updateBool");
>        return componentList.toArray(new String[componentList.size()]);
>    }
>
>    // Iterator used
>    @Persist
>    public abstract Integer getCounter();
>
>    public abstract void setCounter(Integer counter);
>
>
>    public abstract IPropertySelectionModel getResultModel();
>
>    public abstract void setResultModel(IPropertySelectionModel model);
>
>    public abstract IPropertySelectionModel getTargetModel();
>
>    public abstract void setTargetModel(IPropertySelectionModel model);
>
>      @Persist
>    public abstract Test getTest();
>
>    public abstract void setTest(Test test);
>
>    @Persist
>    public abstract Result getResult();
>
>    public abstract void setResult(Result test);
>
>    public abstract Target getTarget();
>
>    public abstract void setTarget(Target target);
>
>    public abstract String getOutput();
>
>    public abstract void setOutput(String output);
>
>    public abstract boolean getOutBool();
>
>    public abstract void setOutBool(boolean bool);
>
> }
>
> The page-file only contains the class-definition.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org