Hrm, true, but somehow there definitely is a RenderingContext; theissue 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 am not 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) In my 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 checkbox and 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(SimpleInputListOfValuesRenderer.java:197) > > > at > > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml. > > SimpleInputListOfValuesRenderer. > > > encodeAllAsElement(SimpleInputListOfValuesRenderer.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$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: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