On 7/10/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

My first reaction to this was... since the form was already rendered and we
are just updating a part of the page, this should not be a problem.  But my
guess is that in my case where I am taking a form element from disabled to
enabled that the necessary javascript would not have been initially
generated and that I really need to have the form element re-rendered.  I
actually did try to have the click on the check box initiate a re-render of
the form.  This seemed to work except for the generation of the following
warning...
Jul 2, 2007 12:29:31 PM
org.apache.myfaces.trinidadinternal.io.DebugResponseWriter
_logDuplicateId
 WARNING: The id "org.ajax4jsf.view.state" is used more than once.

When I mentioned this on the Ajax4JSF forum I was told that rerendering the
form is not the right way.  I am not sure now based on what you are saying
that that should be correct.  It seems reasonable to expect that the form
would have to be rerendered.

Not exactly.

What Trinidad does is that the Form doesn't re-render, but it
does tell the PPR subsystem that a subelement of the form *does*
need to be copied.  So the form as a whole doesn't need to
rerender.  This works fine in the Trinidad system, but A4J
tries to jump right to a single component, which is never going
to work for any system that aggregates results during rendering.
We'd need a hook exposed by A4J to let Trinidad render those
aggregated results.

-- Adam


"Adam Winer" <[EMAIL PROTECTED]> wrote on 07/10/2007 01:16:25 AM:


 > But if that doesn't bear fruit, it wouldn't be that hard
 > to solve this entirely in Trinidad - in each component
 > that requires a FormData, use a hook that will
 > initialize it if it hasn't been rendered yet.
 >
 > However, you'll still have some problems.  Since the
 > FormRenderer isn't involved, and Trinidad has no
 > obvious hooks at all into the A4J code, Trinidad
 > has no way to add any of the form-level Javascript
 > that accompanies our components.  Integration
 > at that layer... well, it'd either have to A4J + Trinidad
 > working very closely together, or JSF 2.0.
 >
 > -- Adam
 >
 >
 >
 > On 7/9/07, Adam Winer <[EMAIL PROTECTED]> wrote:
 > > It's a problem that has to be handled in some bit of code
 > > integrating the two libraries.  I'm curious in this case
 > > how the RenderingContext actually got created at all,
 > > since there's apparently no Trinidad ViewHandler on the
 > > stack...   If someone could track *that* down, we might
 > > have a good idea where to add the code to default
 > > the FormData.
 > >
 > > -- Adam
 > >
 > >
 > > On 7/9/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
 > > >
 > > > I assume then that this should be considered a problem with
 > Ajax4JSF and not
 > > > something to be addressed in Trinidad?
 > > >
 > > >
 > > > "Adam Winer" <[EMAIL PROTECTED]> wrote on 07/09/2007 12:44:50 PM:
 > > >
 > > >  > Hrm, true, but somehow there definitely is a RenderingContext;
 the
 > > > > issue is that the FormData did not get created.
 > > > >
 > > >  > To solve this, some bit of Ajax4JSF code would need a hook
 > > > > point that could be subclassed/plugged-in to that would let
 > > > > Trinidad set up a FormData object.
 > > > >
 > > >  > -- Adam
 > > > >
 > > >
 > > > > On 7/9/07, Matthias Wessendorf <[EMAIL PROTECTED]> wrote:
 > > > > I asked, because I noticed on your stack there is only this
ViewHandler
 > > >  >
 > > >  > AjaxViewHandler (for ajax4jsf)
 > > >  >
 > > >  > On 7/9/07, [EMAIL PROTECTED] < [EMAIL PROTECTED]>
wrote:
 > > >  > >
 > > >  > > Yes, I did.  I followed all of the non-seam directions (since I
amnot
 > > > using
 > > >  > > seam).
 > > >  > >
 > > >  > > [EMAIL PROTECTED] wrote on 07/09/2007 11:57:46 AM:
 > > >  > >
 > > >  > >
 > > >  > >  > have u checked this page
 > > >  > >  >
 > > >  > >  >
http://wiki.apache.org/myfaces/TrinidadSeamAjax4Jsf
 > > >  > >  >
 > > >  > >  > On 7/9/07, [EMAIL PROTECTED]
<[EMAIL PROTECTED]>
 > > > wrote:
 > > >  > >  > >
 > > >  > >  > > I am trying to use Ajax4Jsf with Trinidad, Facelets,
 > and JSF 1.2.
 > > > (I am
 > > >  > >  > > considering using the RichRaces components as well) Inmy
demo I

 > > > have a
 > > >  > >  > > required text field, a check box and a set of fields that
are
 > > > enabled
 > > >  > > if the
 > > >  > >  > > checkbox is selected. I am trying to use ajax on the
checkboxand
 > > > only
 > > >
 > > >  > >  > > refresh the fields that are associated with it.
 > > >  > >  > >  If the initial state of the page is that the box is
 > not selected
 > > > and
 > > >  > > the
 > > >  > >  > > fields are disabled, selecting the checkbox results in the
 > > > following:
 > > >  > >  > >
 > > >  > >  > > WARNING: executePhase(RENDER_RESPONSE
 > > >  > >  > >
6,org.apache.myfaces.trinidadinternal.context.
 > > >  > >  >
[EMAIL PROTECTED])
 > > >  > >  > > threw exception
 > > >  > >  > > java.lang.NullPointerException
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  > EditableValueRenderer.
 > > >  > >  > addOnSubmitConverterValidators
(EditableValueRenderer.java:206)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  >
 > > >  > > SimpleInputTextRenderer.
 > > >  > encodeAllAsElement(SimpleInputTextRenderer.java :105)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  > SimpleInputListOfValuesRenderer.
 > > >  > >  >
 > > >  > > renderTextField(SimpleInputListOfValuesRendere
 > > > r.java:197)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  > SimpleInputListOfValuesRenderer.
 > > >  > >  >
 > > >  > >
encodeAllAsElement(SimpleInputListOfValuesRendere
 > > > r.java:154)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  >
 > > >  > > SimpleInputDateRenderer.
 > > >  > encodeAllAsElement(SimpleInputDateRenderer.java:194)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  > FormElementRenderer.encodeAll(FormElementRenderer.java:109)
 > > >  > >  > >         at
 > > >  > >  > >
org.apache.myfaces.trinidad.render.CoreRenderer.
 > > >  > >  > delegateRenderer(CoreRenderer.java:318)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml .
 > > >  > >  > InputLabelAndMessageRenderer.
 > > >  > >  >
 > > >  > >
 > > >
renderFieldCellContents(InputLabelAndMessageRenderer.java:142)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml .
 > > >  > >  >
 > > >  > >
 > > >
LabelAndMessageRenderer._renderFieldCell(LabelAndMessageRenderer.java:375)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  >
 > > >  > >
 > > >
LabelAndMessageRenderer.encodeAll(LabelAndMessageRenderer.java:270)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.
 > > >  > >  >
 > > >  > > InputLabelAndMessageRenderer .
 > > >  > encodeAll(InputLabelAndMessageRenderer.java:120)
 > > >  > >  > >         at
 > > >  > >  > >
org.apache.myfaces.trinidad.render.CoreRenderer.
 > > >  > >  > encodeEnd(CoreRenderer.java:208)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidad.component.UIXComponentBase.
 > > >  > >  > encodeEnd(UIXComponentBase.java:733)
 > > >  > >  > >         at
 > > >  > >  > >
org.ajax4jsf.framework.renderer.RendererBase .
 > > >  > >  > renderChild(RendererBase.java:286)
 > > >  > >  > >         at
 > > >  > >  > >
org.ajax4jsf.framework.renderer.RendererBase.
 > > >  > >  > renderChildren(RendererBase.java:262)
 > > >  > >  > >         at
 > > >  > >  > >
 > > > org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.
 > > >  > >  > encodeChildren(AjaxOutputPanelRenderer.java:79)
 > > >  > >  > >         at
 > > >  > >  > > javax.faces.component.UIComponentBase.
 > > >  > >  > encodeChildren(UIComponentBase.java:812)
 > > >  > >  > >         at
 > > >  > >  > >
org.ajax4jsf.framework.renderer.RendererBase.
 > > >  > >  > renderChild(RendererBase.java:282)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.
 > > >  > >  > encodeAjaxComponent(AjaxChildrenRenderer.java:159)
 > > >  > >  > >         at
 > > >  > >  > >
 > > > org.ajax4jsf.framework.renderer.AjaxChildrenRenderer
.
 > > >  > >  > encodeAjaxChildren(AjaxChildrenRenderer.java:97)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.
 > > >  > >  > encodeAjaxComponent(AjaxChildrenRenderer.java :150)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.
 > > >  > >  > encodeAjaxChildren(AjaxChildrenRenderer.java:97)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.
 > > >  > >  > encodeAjaxComponent(AjaxChildrenRenderer.java:150)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >
org.ajax4jsf.framework.renderer.AjaxContainerRenderer .
 > > >  > >  > encodeAjax(AjaxContainerRenderer.java:125)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:549)
 > > >  > >  > >         at
 > > >  > >  > > org.ajax4jsf.framework.ajax.AjaxContext.
 > > >  > >  > renderAjaxRegion(AjaxContext.java:307)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.ajax4jsf.framework.ajax.AjaxContext$2.invoke(AjaxContext.java
 > > > :222)
 > > >  > >  > >         at
 > > >  > >  > >
org.ajax4jsf.framework.ajax.JsfOneOneInvoker.
 > > >  > >  > invokeOnComponent(JsfOneOneInvoker.java:75)
 > > >  > >  > >         at
 > > >  > >  > > org.ajax4jsf.framework.ajax .AjaxContext.
 > > >  > >  > invokeOnComponent(AjaxContext.java:178)
 > > >  > >  > >         at
 > > >  > >  > > org.ajax4jsf.framework.ajax.AjaxContext.
 > > >  > >  > renderSubmittedAjaxRegion(AjaxContext.java:236)
 > > >  > >  > >         at
 > > >  > >  > >
org.ajax4jsf.framework.ajax.AjaxViewHandler.
 > > >  > >  > renderView(AjaxViewHandler.java:256)
 > > >  > >  > >         at
 > > >  > >  > >
com.sun.faces.lifecycle.RenderResponsePhase.
 > > >  > >  > execute(RenderResponsePhase.java:106)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
 > > >  > >  > >         at
 > > >  > >  > >
org.apache.catalina.core.ApplicationFilterChain.
 > > >  > >  > internalDoFilter(ApplicationFilterChain.java:269)
 > > >  > >  > >         at
 > > >  > >  > >
org.apache.catalina.core.ApplicationFilterChain.
 > > >  > >  > doFilter(ApplicationFilterChain.java:188)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.
 > > >  > >  > _invokeDoFilter(TrinidadFilterImpl.java :208)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.
 > > >  > >  > _doFilterImpl(TrinidadFilterImpl.java:165)
 > > >  > >  > >         at
 > > >  > >  > >
 > > >  > >
 > > >
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.
 > > >  > >  > doFilter(TrinidadFilterImpl.java:138)
 > > >  > >  > >         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.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.
 > > >  > >  > doXmlFilter(BaseXMLFilter.java:127)
 > > >  > >  > >         at
 > > >  > >  > >
org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.
 > > >  > >  > doFilter(BaseFilter.java:277)
 > > >  > >  > >         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$Http11Conne ctionHandler.
 > > >  > >  > 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 :595)
 > > >  > >  > >
 > > >  > >  > >
 > > >  > >  > > Here is the facelet....
 > > >  > >  > >
 > > >  > >  > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
 > > >  > >  > >
 > > >  > >
 > > >
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
 > > >  > >  > >  <html xmlns="http://www.w3.org/1999/xhtml "
 > > >  > >  > >       xmlns:h="http://java.sun.com/jsf/html";
 > > >  > >  > >       xmlns:f="http://java.sun.com/jsf/core "
 > > >  > >  > >
xmlns:ui="http://java.sun.com/jsf/facelets";
 > > >  > >  > >       xmlns:tr="http://myfaces.apache.org /trinidad"
 > > >  > >  > >
 > > >  > >
xmlns:trh="http://myfaces.apache.org/trinidad/html";
 > > >  > >  > >       xmlns:a4j="
 > > > https://ajax4jsf.dev.java.net/ajax";>
 > > >  > >  > >   <body>
 > > >  > >  > >     <form name="form" jsfc="h:form"  >
 > > >  > >  > >       <input id="custRef" type="text" jsfc="h:inputText"
 > > >  > >  > >         required="true" value="#{customer.custRef}"
 > > >  > >  > >         label="Customer reference"/><br/>
 > > >  > >  > >
 > > >  > >  > >       <h:selectBooleanCheckbox name="hierBill" id="toSend2"
 > > >  > >  > >         value="#{customer.hierBill}">
 > > >  > >  > >         <f:selectItem itemLabel="Hierarchy Billing"
 > > >  > >  > >           itemValue="true"/>
 > > >  > >  > >         <a4j:support event="onclick"
reRender="hierBillStuff"
 > > >  > >  > > ajaxSingle="true"/>
 > > >  > >  > >       </h:selectBooleanCheckbox>
 > > >  > >  > >       <a4j:outputPanel ajaxRendered="true">
 > > >  > >  > >         <h:messages/>
 > > >  > >  > >       </a4j:outputPanel>
 > > >  > >  > >       <a4j:outputPanel id="hierBillStuff">
 > > >  > >  > >         <label class="required">Bill period:</label><br/>
 > > >  > >  > >         <input type="text" name="billPer" size="10"
id="billPer"
 > > >  > >  > >           jsfc="h:inputText" value="#{customer.billPeriod}"
 > > >  > >  > >           required="true"
 > > >  > >  > > disabled="#{!createCustBean.hierBill}"/>
 > > >  > >  > >         <select name="select" jsfc="h:selectOneListbox"
size="1"
 > > >  > >  > >           id="billPerFreq"
 > > >  > >  > >           value="#{customer.billPeriodFreq}"
 > > >  > >  > >           required="true"
 > > >  > >  > > disabled="#{!createCustBean .hierBill}">
 > > >  > >  > >           <f:selectItems
 > > > value="#{createCustBean.billPeriodFreqs}"/>
 > > >  > >  > >         </select>
 > > >  > >  > >
 > > >  > >  > >         <label class="required">Next bill
date:</label><br/>
 > > >  > >  > >         <tr:inputDate id="nextBillDate"
 > > >  > >  > >           value="#{customer.nextBillDate}"
 > > >  > >  > >
disabled="#{!createCustBean.hierBill}"
 > > >  > >  > > required="true" />
 > > >  > >  > >
 > > >  > >  > >         <label class="required">Number of bills per
 > > >  > > statement:</label><br />
 > > >  > >  > >         <input type="text" name="numBills" id="numBills"
 > > >  > >  > >           jsfc="h:inputText" value="#{customer.numBills}"
 > > >  > >  > >
disabled="#{!createCustBean.hierBill}"
 > > >  > >  > > required="true"/>
 > > >  > >  > >       </a4j:outputPanel>
 > > >  > >  > >     </form>
 > > >  > >  > >     <ui:debug hotkey="p"
rendered="#{initParam.debugMode}"/>
 > > >  > >  > >     <a4j:log hotkey="o"/>
 > > >  > >  > >   </body>
 > > >  > >  > >  </html>
 > > >  > >  > >
 > > >  > >  > >
 > > >  > >  > > The problem seems to be that the Trinidad
EditableValueRender
 > > > class
 > > >  > > (which
 > > >  > >  > > is the base class of the input field renderers) expects a
 > > > reference to
 > > >  > > a
 > > >  > >  > > FormData object in a rendering context. The FormData object
is
 > > >  > > established
 > > >  > >  > > in the context when the form element is rendered. In
 > the suggested
 > > >  > > approach
 > > >  > >  > > of just rendering the affected fields the form
 > component does not
 > > > get
 > > >  > >  > > rerendered so as a result the FormData object reference
does not
 > > > get
 > > >  > > set and
 > > >  > >  > > therefore a null pointer results.
 > > >  > >  > >
 > > >  > >  > >  It appears that Trinidad and Ajax4JSF are incompatible for
this
 > > > type
 > > >  > > of
 > > >  > >  > > thing.
 > > >  > >  > >
 > > >  > >  >
 > > >  > >  >
 > > >  > >  > --
 > > >  > >  > Matthias Wessendorf
 > > >  > >  >
 > > >  > >  > further stuff:
 > > >  > >  > blog:
http://matthiaswessendorf.wordpress.com/
 > > >  > >  > mail: matzew-at-apache-dot-org
 > > >  > >
 > > >  >
 > > >  >
 > > >  > --
 > > >  > Matthias Wessendorf
 > > >  >
 > > >  > further stuff:
 > > >  > blog: http://matthiaswessendorf .wordpress.com/
 > > >  > mail: matzew-at-apache-dot-org
 > >

Reply via email to