Couple months ago, I've also tried to integrate Trinidad and Ajax4Jsf
and never solved this problem. Appears that it has to do something with
tr:convertDate or tr:convertNumber. If you use a4j only with
tr:inputText for string entry, then it worked. There is also a plug-in
class a4j-trinidad.jar that have to be also in WEB-INF/lib, but that
also didn't help me. I've tried also on Jboss support forum, but no luck
to solve this problem.
[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,[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.
--
Luka Ĺ urija
[EMAIL PROTECTED]
+385 98 434 061
I.Y. tim d.o.o.
www.iytim.hr
[EMAIL PROTECTED]