Rafa Pérez wrote:
Could you change your h:dataTable for a tr:table?? Just to see what happens...

Tried this days ago, but to no avail. The value change is fired, but no partial triggers field refresh. The first time through it I used a plain partialTriggers name. From there I tried ::finalMarkField (at first I didn't notice that I'd lost one level of naming containers so I had 3 colons). I've also tried Andrew's subform and am using 2 inputText components in case the inputDate is the issue. No dice on all accounts.

Shane


On Feb 11, 2008 8:30 AM, Shane Petroff <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Andrew Robinson wrote:
    Subform is a naming container, so you will have to give it an ID
    and use colons to get out and back in.

    OK, when I tried, I didn't explicitly name the subforms, I just
    used 4 colons. Unfortunately, the subforms (named or not) made
    things worse. When the subforms were introduced, the value change
    listener is never called.



    Replace the inputDate with an outputText of the same ID -- does
    it update?
    - If so this is not a PPR problem

    It does not update; this was my original setup. It is not PPR per
    se, because I slapped a couple of arbitrary text boxes on the form
    and was able to get them linked very easily, the issue seems to be
    PPR within the dataTable.



    Leave it as an inputDate and use the Firebug extension in Firefox
    to view the AJAX response. Does it contain the inputDate?

    I've never really used Firebug before, so forgive me if I've got
    it wrong, but in Inspect/Console, there appears to be POST entries
    corresponding to the AJAX calls (Common1_0_5.js line 10680 to be
    specific). The POST tab indicates what looks to be correct data:

    _idJsp1:_idJsp4:6:finalMarkField    44
    _idJsp1:_idJsp4:6:withdrawalDate    
    _idJsp1:_idJsp4:7:finalMarkField    
    _idJsp1:_idJsp4:7:withdrawalDate    
    _idJsp1:_idJsp4:8:finalMarkField    
    _idJsp1:_idJsp4:8:withdrawalDate    
    _idJsp1:_idJsp4:9:finalMarkField    
    _idJsp1:_idJsp4:9:withdrawalDate    
    _idJsp1:xxx         
    _idJsp1:yyy         
    event       autosub
    org.apache.myfaces.trinidad.faces.FORM      _idJsp1
    org.apache.myfaces.trinidad.faces.STATE     !5e7200c0
    partial     true
    source      _idJsp1:_idJsp4:6:finalMarkField


    but the response tab make no mention of the date field.

    <?xml version="1.0" ?>
    <?Tr-XHR-Response-Type ?>
    <content action="/reportCard/pages/classList.jsf">
    <body class="page-background">

    <!-- MYFACES JAVASCRIPT -->
    </body>
    <fragment><![CDATA[<span id="tr__idJsp1_Postscript"><input
    type="hidden" name="org.apache.myfaces.trinidad
    .faces.STATE" value="!5e7200c0"><input type="hidden"
    name="source"></span>]]></fragment>
    
<script><![CDATA[TrPage.getInstance()._addResetFields('_idJsp1',["source"]);]]></script><script><![CDATA
    [var _idJsp1_SF={};]]></script></content>



    If the above shows that it is not a PPR problem and you don't
    want to bother with the subform, put a breakpoint in your set
    method to see who is calling it and with what value. The stack
    trace should show you the caller and you can determine the phase.

    This I'd done previously, but wasn't able to decipher the results.
    If I manufacture an exception, then fill in and print it's stack
    trace, I get the following:

    WARNING: Could not find partial trigger :::finalMarkField from
    CoreInputText[UIXEditableFacesBeanImpl, id=withdrawalDate]
    (The warning is generated prior to manufacturing the exception
    below. This scenario is with no subforms)

    java.lang.Exception
        at
    ca.mayet.backing.ClassListBean.finalMarkChanged(ClassListBean.java:188)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
    
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
    
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
    org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
        at
    
org.apache.myfaces.trinidad.component.UIXComponentBase.broadcastToMethodBinding(UIXComponentBase.java:1188)
        at
    
org.apache.myfaces.trinidad.component.UIXEditableValue.broadcast(UIXEditableValue.java:213)
        at javax.faces.component.UIData.broadcast(UIData.java:517)
        at
    javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
        at
    javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:150)
        at
    
org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
        at
    
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
        at
    org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
        at
    
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at
    
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at
    
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
        at
    
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at
    
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at
    
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter(TrinidadFilterImpl.java:253)
        at
    
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:210)
        at
    
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:164)
        at
    
org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
        at
    
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at
    
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at
    
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:173)
        at
    
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
        at
    
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at
    
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at
    
ca.mayet.SessionTimeoutRedirectFilter.doFilter(SessionTimeoutRedirectFilter.java:78)
        at
    
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at
    
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at
    
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
        at
    
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at
    
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at
    
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at
    
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
        at
    
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at
    
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at
    
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at
    
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Thread.java:619)

    How can I tell from this information which phase is being
    executed? I'm assuming that the processValidators call buried in
    there tells me that it is happening early (before model updates),
    but the info didn't mean much to me. FWIW, there are no validators
    attached, unless there is something embedded in the component itself.

    otherwise, try this:

    except for the names, this is what I'd tried previously.
    Unfortunately, naming the subforms did not help.

    In any case, thanks for all of your help Andrew.

    Shane



    <h:dataTable ...
      <h:column>
        <f:facet
          name="header">
          <h:outputText
            value="#{bundle.ClassListFinalMarkHeader}"
            styleClass="label"/>
        </f:facet>
        <tr:subform id="finalMarkForm">
          <tr:inputText
            id="finalMarkField"
            columns="5"
            value="#{studentSec.finalMark}"
            autoSubmit="true"
            valueChangeListener="#{classListBean.finalMarkChanged}"/>
        </tr:subform>
      </h:column>
      <h:column>
        <f:facet
          name="header">
          <h:outputText
            value="#{bundle.ClassListWithdrawalDateHeader}"
            styleClass="label"/>
        </f:facet>
        <tr:subform id="withdrawalDateForm">
          <tr:inputDate
            id="withdrawalDate"
            columns="11"
            partialTriggers=":::finalMarkForm:finalMarkField"
            value="#{studentSec.withdrawalDate}"
            required="false"/>
          <h:message for="withdrawalDate"/>
        </tr:subform>
      </h:column>

    Note that in trinidad 1.x.7 this will become
    partialTriggers="::finalMarkForm:finalMarkField" (one less colon).



    On Feb 8, 2008 4:26 PM, Shane Petroff <[EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>> wrote:

        Andrew Robinson wrote:
I think I know your problem. It is a phase issue

        I'll take your word for it, but I guess the only thing I
        could do to try and trace it through was to set a breakpoint
        in the decode method and step through everything.


        and why value change listeners (VCL) suck in JSF (really bad
        architecture)

        Is there a better option? Even combos fire value changes.



        The VCL architecture sucks as it is not transaction aware,
        and the events fired in the validation doesn't mean that the
        update will ever be done (so the new value may never become
        the actual value). Also, when the VCL is invoked, the model
        is not updated, so you can't trust values from the model
        layer (beans) since they may have pending changes.

        I haven't tried it, but add a <tr:subform> around each
        input. This should only validate & update the value that has
        changed instead of the entire form.
        Didn't work. I'm using

          <h:column>
                <tr:subform>
                    <tr:inputText

        and similar for the inputDate

        One curious thing about this layout is that it can no longer
        find partial triggers fields when a normal name is specified
        for partialTriggers.

        Feb 8, 2008 5:12:16 PM
        org.apache.myfaces.trinidadinternal.context.RequestContextImpl
        addPartialTriggerListeners
        WARNING: Could not find partial trigger finalMarkField from
        CoreInputDate[UIXEditableFacesBeanImpl, id=_idJsp14]

        I tried the preceding colons as well (4 of them this time
        because of the additional nesting), but no luck there either.

        Surely I'm not the first person to try to use PPR/ValueChange
        on an editable table am I?



        On Feb 8, 2008 1:14 PM, Shane Petroff <[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>> wrote:

            Andrew Robinson wrote:

            What trinidad build are you using?

            Trinidad 1.0.5,
            MyFaces Core 1.1.5



            colons should not be necessary for components in the
            same naming container.

            Tried with and without. Using the colons clearly does
            not work because it issues the warning:

            WARNING: Could not find partial trigger
            :::finalMarkField from
            CoreInputDate[UIXEditableFacesBeanImpl, id=_idJsp12]

            With no preceding colons there is no warning generated,
            but the field is never refreshed either. The value
            change method is below, as is a stripped down jsp. I can
            see the value change being fired, but where would I even
            set a breakpoint to tell if anything is happening on the
            partialTriggers side?




                public void finalMarkChanged( ValueChangeEvent event )
                {
                    StudentSection ss = (StudentSection)
            m_Table.getRowData();
                    ss.setWithdrawalDate(new Date()); // I'm
            assuming that this instance is still around to refresh
            the field from

                    System.out.println( "finalMarkChanged for " +
            ss.getStudentName() + " " + ss.getWithdrawalDate() );
                }


            <f:view>

            <tr:document title="#{bundle.ClassListHeader}">


            <body class="page-background">

            <h:form>

              <h:panelGrid headerClass="page-header" styleClass="panel"
                           columns="1" cellpadding="5">

                <h:messages showDetail="true" showSummary="false"
            styleClass="errors"/>

                <h:dataTable styleClass="dataTable"
                             rowClasses="list-row-even,list-row-odd"
            cellpadding="4" border="0"
                             headerClass="list-header"
                             cellspacing="0"
                             value="#{classListBean.studentSections}"
                             var="studentSec"
                             binding="#{classListBean.table}">

                  <h:column>
                    <f:facet name="header">
                      <h:commandLink styleClass="table-header"
            id="studentDesc"
actionListener="#{classListBean.sort}">
                        <h:outputText
            value="#{bundle.StudentColHeader}"/>
                      </h:commandLink>
                    </f:facet>
                    <h:outputText value="#{studentSec.studentName}"/>
                  </h:column>

                  <h:column>
                    <f:facet name="header">
                        <h:outputText
            value="#{bundle.ClassListFinalMarkHeader}"
            styleClass="label"/>
                    </f:facet>
                    <tr:inputText id="finalMarkField"
                                  columns="5"
                                  value="#{studentSec.finalMark}"
                                  autoSubmit="true"
valueChangeListener="#{classListBean.finalMarkChanged}"/>
                  </h:column>

                  <h:column>
                    <f:facet name="header">
                        <h:outputText
            value="#{bundle.ClassListWithdrawalDateHeader}"
            styleClass="label"/>
                    </f:facet>
                    <tr:inputDate columns="11"

                                  partialTriggers=":::finalMarkField"
                                  value="#{studentSec.withdrawalDate}"
                                  required="false" >
                        <f:convertDateTime pattern="dd-MMM-yyyy"
            timeZone="#{configBundle.TimeZone}"/>
                    </tr:inputDate>
                  </h:column>

                </h:dataTable>

              </h:panelGrid>

            </h:form>

            </body>

            </tr:document>

            </f:view>




            On Feb 8, 2008 10:31 AM, Shane Petroff <[EMAIL PROTECTED]
            <mailto:[EMAIL PROTECTED]>> wrote:

                Matthias Wessendorf wrote:
                > ah,
                > I just noticed, that "finalMarkField" is inside a
                table (naming container).
                > haven't read your code carefully, sorry.
                >
                > can you *try* partialTriggers=":::finalMarkField" ?
                >

                No joy... cleared the browser cache first, then
                dumped tomcat's cache,
                did a full build and restarted the server. I also
                tried :: and ::::
                variants (3 does appear to be the correct number
                though based on the
                generated html), but still no partial triggers
                refresh. Would it be more
                likely to work if I switched to a tr:table?

                --
                Shane


-- Shane




-- Shane




-- Shane




--
Shane

Reply via email to