You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-user@incubator.apache.org by Marco Huber <mh...@project-team.de> on 2007/03/01 15:50:43 UTC
Required attribute throws NullPointerException
Hi all,
I have the problem that a required attribute throws a npe, but I can't
figured out where the problem lies. I hope some can help me on this issue.
I have a JSF page like followed:
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:tr="http://myfaces.apache.org/trinidad"
xmlns:trh="http://myfaces.apache.org/trinidad/html" >
<h:form id="editForm">
<tr:selectOneRadio id="userAttributes"
label="#{messages['selection']}"
value="#{editAction.userAttribute}"
required="true"
requiredMessageDetail="#{messages['userAttribute.required']}" >
<f:selectItems value="#{editAction.userAttributeList}"/>
<a4j:support event="onclick" reRender="showCustomAttribute" />
</tr:selectOneRadio>
<a4j:outputPanel id="showCustomAttribute" >
<tr:inputText id="customAttribute"
label="#{messages['userAttribute.text']}"
value="#{editAction.userAttribute.text}"
rendered="#{editAction.userAttributeSelected}"
required="true"
/>
</a4j:outputPanel>
<h:commandButton action="#{editAction..save}"
value="#{messages['button.save']}" />
<h:commandButton action="#{editAction..cancel}"
value="#{messages['button.cancel']}" immediate="true" />
</h:form>
</f:view>
The UserAttribute is a abstract class with 2 inheritances:
BuildInAttribute and a CustomAttribute in which a text can added.
If I left out the required="true" in my tr:inputText all works fine. If
I define the attribute and I click on an instance of an new
CustomAttribute I got the following StackTrace:
12:01:26,765 ERROR [SeamExceptionFilter] exception root cause
java.lang.NullPointerException
at
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.EditableValueRenderer.addOnSubmitConverterValidators(EditableVal
at
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.encodeAllAsElement(SimpleInputTextRender
at
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.FormElementRenderer.encodeAll(FormElementRenderer.java:69)
at
org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer(CoreRenderer.java:297)
at
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.renderFieldCellContents(InputLabelA
at
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer._renderFieldCell(LabelAndMessageRenderer
at
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer.encodeAll(LabelAndMessageRenderer.java:2
at
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.encodeAll(InputLabelAndMessageRende
at
org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:184)
at
org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:701)
at
org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java:249)
at
org.ajax4jsf.framework.renderer.RendererBase.renderChildren(RendererBase.java:225)
at
org.ajax4jsf.renderers.ajax.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:74)
at
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:527)
at
org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java:245)
at
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(AjaxChildrenRenderer.java:120)
at
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(AjaxChildrenRenderer.java:111)
at
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(AjaxChildrenRenderer.java:111)
at
org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(AjaxChildrenRenderer.java:111)
at
org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:126)
at
org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:570)
at
org.ajax4jsf.framework.ajax.AjaxContext.renderAjaxRegion(AjaxContext.java:301)
at
org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:249)
at
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter(TrinidadFilterImpl.java:210)
at
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:167)
at
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:140)
at
org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:93)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:75)
at
org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:213)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:29)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:43)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at
org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at
org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:619)
All attribute in my class are initialized, so I don't think that the
problem lies on the access of the text attribute in my CustomAttribute.
Thanks for you help
Marco
Re: Required attribute throws NullPointerException
Posted by Marco Huber <mh...@project-team.de>.
Hello Matthias,
I wrote something about partial-page rendering to show and hide
components to the wiki.
You find it under:
http://wiki.apache.org/myfaces/Partial-page_rendering
So others can add here examples to work with this feature. ;-)
Regards
Marco
Matthias Wessendorf wrote:
> Hello Marco,
>
> would be great if you put that to our wiki ;-)
>
> Thanks!
> Matthias
>
> On 3/2/07, Marco Huber <mh...@project-team.de> wrote:
>> Thank you Adam for your response.
>>
>> The solution putting the a4j component outside the form wouldn't work
>> for me, because I need both data (the selected item and the text) in my
>> action.
>>
>> But you gave me a hint about the partial-page rendering. I removed the
>> a4j commonents and use now the partial-page rendering supported from
>> trinidad. At that was the solution.
>> If I put now the required=true attribute to my inputText it works as
>> espected.
>>
>> Here my changed code, for those having a similar problem:
>>
>> <tr:selectOneRadio id="userAttributes"
>> label="#{messages['selection']}"
>> value="#{editAction.userAttribute}"
>> required="true"
>> requiredMessageDetail="#{messages['userAttribute.required']}"
>> autoSubmit="true" >
>> <f:selectItems value="#{editAction.userAttributeList}"/>
>> </tr:selectOneRadio>
>>
>> <tr:panelGroupLayout layout="horizontal" id="showCustomAttribute"
>> partialTriggers="editForm:userAttributes" >
>> <tr:inputText id="customAttribute"
>> label="#{messages['userAttribute.text']}"
>> value="#{editAction.userAttribute.text}"
>> rendered="#{editAction.userAttributeSelected}"
>> required="true" />
>> </tr:panelGroupLayout>
>>
>> Thank you again
>> Marco
>>
>> Adam Winer wrote:
>> > The problem is in how Ajax4JSF handles partial-page rendering. It
>> skips
>> > over the form component entirely, so the Trinidad RenderingContext does
>> > not have a FormData object attached.
>> >
>> > Any Trinidad component that has client-side validation will result
>> in the
>> > same error.
>> >
>> > Trinidad implements partial-page rendering very differently, using
>> > ResponseWriter
>> > filtering to only render the necessary component.
>> >
>> > You'd have to move the appropriate a4j: component outside of the h:form
>> > to get it working.
>> >
>> > -- Adam
>> >
>> >
>> >
>> > On 3/1/07, Marco Huber <mh...@project-team.de> wrote:
>> >>
>> >> Hi all,
>> >>
>> >> I have the problem that a required attribute throws a npe, but I can't
>> >> figured out where the problem lies. I hope some can help me on this
>> >> issue.
>> >>
>> >> I have a JSF page like followed:
>> >>
>> >>
>> >> <f:view xmlns="http://www.w3.org/1999/xhtml"
>> >> xmlns:s="http://jboss.com/products/seam/taglib"
>> >> xmlns:ui="http://java.sun.com/jsf/facelets"
>> >> xmlns:f="http://java.sun.com/jsf/core"
>> >> xmlns:h="http://java.sun.com/jsf/html"
>> >> xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
>> >> xmlns:tr="http://myfaces.apache.org/trinidad"
>> >> xmlns:trh="http://myfaces.apache.org/trinidad/html" >
>> >>
>> >> <h:form id="editForm">
>> >>
>> >> <tr:selectOneRadio id="userAttributes"
>> >> label="#{messages['selection']}"
>> >> value="#{editAction.userAttribute}"
>> >> required="true"
>> >>
>> >> requiredMessageDetail="#{messages['userAttribute.required']}" >
>> >> <f:selectItems value="#{editAction.userAttributeList}"/>
>> >> <a4j:support event="onclick"
>> reRender="showCustomAttribute"
>> >> />
>> >>
>> >> </tr:selectOneRadio>
>> >> <a4j:outputPanel id="showCustomAttribute" >
>> >> <tr:inputText id="customAttribute"
>> >> label="#{messages['userAttribute.text']}"
>> >> value="#{editAction.userAttribute.text}"
>> >>
>> rendered="#{editAction.userAttributeSelected}"
>> >> required="true"
>> >> />
>> >> </a4j:outputPanel>
>> >>
>> >> <h:commandButton action="#{editAction..save}"
>> >> value="#{messages['button.save']}" />
>> >> <h:commandButton action="#{editAction..cancel}"
>> >> value="#{messages['button.cancel']}" immediate="true" />
>> >>
>> >> </h:form>
>> >>
>> >> </f:view>
>> >>
>> >> The UserAttribute is a abstract class with 2 inheritances:
>> >> BuildInAttribute and a CustomAttribute in which a text can added.
>> >> If I left out the required="true" in my tr:inputText all works
>> fine. If
>> >> I define the attribute and I click on an instance of an new
>> >> CustomAttribute I got the following StackTrace:
>> >>
>> >> 12:01:26,765 ERROR [SeamExceptionFilter] exception root cause
>> >> java.lang.NullPointerException
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.EditableValueRenderer.addOnSubmitConverterValidators
>>
>> >>
>> >> (EditableVal
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.encodeAllAsElement
>>
>> >>
>> >> (SimpleInputTextRender
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.FormElementRenderer.encodeAll
>>
>> >>
>> >> (FormElementRenderer.java:69)
>> >> at
>> >> org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer(
>> >> CoreRenderer.java:297)
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.renderFieldCellContents
>>
>> >>
>> >> (InputLabelA
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer._renderFieldCell
>>
>> >>
>> >> (LabelAndMessageRenderer
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer.encodeAll
>>
>> >>
>> >> (LabelAndMessageRenderer.java:2
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.encodeAll
>>
>> >>
>> >> (InputLabelAndMessageRende
>> >> at
>> >> org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(
>> >> CoreRenderer.java:184)
>> >> at
>> >> org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(
>> >> UIXComponentBase.java:701)
>> >> at
>> >>
>> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
>>
>> >>
>> >> :249)
>> >> at
>> >> org.ajax4jsf.framework.renderer.RendererBase.renderChildren(
>> >> RendererBase.java:225)
>> >> at
>> >> org.ajax4jsf.renderers.ajax.AjaxOutputPanelRenderer.encodeChildren(
>> >> AjaxOutputPanelRenderer.java:74)
>> >> at
>> >>
>> javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java
>> >> :527)
>> >> at
>> >>
>> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
>>
>> >>
>> >> :245)
>> >> at
>> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> >> AjaxChildrenRenderer.java:120)
>> >> at
>> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> >> AjaxChildrenRenderer.java:111)
>> >> at
>> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> >> AjaxChildrenRenderer.java:111)
>> >> at
>> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> >> AjaxChildrenRenderer.java:111)
>> >> at
>> >> org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjax(
>> >> AjaxContainerRenderer.java:126)
>> >> at
>> >>
>> org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:570)
>>
>> >>
>> >> at
>> >>
>> org.ajax4jsf.framework.ajax.AjaxContext.renderAjaxRegion(AjaxContext.java
>> >> :301)
>> >> at
>> >> org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(
>> >> AjaxViewHandler.java:249)
>> >> at
>> >> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(
>> >> RenderResponseExecutor.java:41)
>> >> at
>> >>
>> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
>> >> at
>> >> javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> >> ApplicationFilterChain.java:252)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> >> ApplicationFilterChain.java:173)
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter
>>
>> >>
>> >> (TrinidadFilterImpl.java:210)
>> >> at
>> >>
>> >>
>> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl
>>
>> >>
>> >> (TrinidadFilterImpl.java:167)
>> >> at
>> >>
>> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(
>> >> TrinidadFilterImpl.java:140)
>> >> at
>> >> org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(
>> >> TrinidadFilter.java:93)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> >> ApplicationFilterChain.java:202)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> >> ApplicationFilterChain.java:173)
>> >> at
>> >> org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(
>> >> BaseXMLFilter.java:75)
>> >> at
>> >>
>> org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java
>> >> :213)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> >> ApplicationFilterChain.java:202)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> >> ApplicationFilterChain.java:173)
>> >> at
>> >>
>> org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java
>>
>> >>
>> >> :29)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> >> ApplicationFilterChain.java:202)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> >> ApplicationFilterChain.java:173)
>> >> at
>> >> org.jboss.seam.servlet.SeamExceptionFilter.doFilter(
>> >> SeamExceptionFilter.java:43)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> >> ApplicationFilterChain.java:202)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> >> ApplicationFilterChain.java:173)
>> >> at
>> >> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(
>> >> ReplyHeaderFilter.java:96)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> >> ApplicationFilterChain.java:202)
>> >> at
>> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> >> ApplicationFilterChain.java:173)
>> >> at
>> >> org.apache.catalina.core.StandardWrapperValve.invoke(
>> >> StandardWrapperValve.java:213)
>> >> at
>> >> org.apache.catalina.core.StandardContextValve.invoke(
>> >> StandardContextValve.java:178)
>> >> at
>> >> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(
>> >> SecurityAssociationValve.java:175)
>> >> at
>> >> org.jboss.web.tomcat.security.JaccContextValve.invoke(
>> >> JaccContextValve.java:74)
>> >> at
>> >>
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
>> >> :126)
>> >> at
>> >>
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
>> >> :105)
>> >> at
>> >> org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(
>> >> CachedConnectionValve.java:156)
>> >> at
>> >> org.apache.catalina.core.StandardEngineValve.invoke(
>> >> StandardEngineValve.java:107)
>> >> at
>> >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
>> >> :148)
>> >> at
>> >>
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>>
>> >>
>> >> at
>> >>
>> >>
>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
>>
>> >>
>> >> (Http11BaseProtocol.java:664)
>> >> at
>> >> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
>> >> PoolTcpEndpoint.java:527)
>> >> at
>> >> org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(
>> >> MasterSlaveWorkerThread.java:112)
>> >> at java.lang.Thread.run(Thread.java:619)
>> >>
>> >> All attribute in my class are initialized, so I don't think that the
>> >> problem lies on the access of the text attribute in my
>> CustomAttribute.
>> >>
>> >> Thanks for you help
>> >> Marco
>> >>
>> >
>>
>>
>
>
Re: Required attribute throws NullPointerException
Posted by Matthias Wessendorf <ma...@apache.org>.
Hello Marco,
would be great if you put that to our wiki ;-)
Thanks!
Matthias
On 3/2/07, Marco Huber <mh...@project-team.de> wrote:
> Thank you Adam for your response.
>
> The solution putting the a4j component outside the form wouldn't work
> for me, because I need both data (the selected item and the text) in my
> action.
>
> But you gave me a hint about the partial-page rendering. I removed the
> a4j commonents and use now the partial-page rendering supported from
> trinidad. At that was the solution.
> If I put now the required=true attribute to my inputText it works as
> espected.
>
> Here my changed code, for those having a similar problem:
>
> <tr:selectOneRadio id="userAttributes"
> label="#{messages['selection']}"
> value="#{editAction.userAttribute}"
> required="true"
> requiredMessageDetail="#{messages['userAttribute.required']}"
> autoSubmit="true" >
> <f:selectItems value="#{editAction.userAttributeList}"/>
> </tr:selectOneRadio>
>
> <tr:panelGroupLayout layout="horizontal" id="showCustomAttribute"
> partialTriggers="editForm:userAttributes" >
> <tr:inputText id="customAttribute"
> label="#{messages['userAttribute.text']}"
> value="#{editAction.userAttribute.text}"
> rendered="#{editAction.userAttributeSelected}"
> required="true" />
> </tr:panelGroupLayout>
>
> Thank you again
> Marco
>
> Adam Winer wrote:
> > The problem is in how Ajax4JSF handles partial-page rendering. It skips
> > over the form component entirely, so the Trinidad RenderingContext does
> > not have a FormData object attached.
> >
> > Any Trinidad component that has client-side validation will result in the
> > same error.
> >
> > Trinidad implements partial-page rendering very differently, using
> > ResponseWriter
> > filtering to only render the necessary component.
> >
> > You'd have to move the appropriate a4j: component outside of the h:form
> > to get it working.
> >
> > -- Adam
> >
> >
> >
> > On 3/1/07, Marco Huber <mh...@project-team.de> wrote:
> >>
> >> Hi all,
> >>
> >> I have the problem that a required attribute throws a npe, but I can't
> >> figured out where the problem lies. I hope some can help me on this
> >> issue.
> >>
> >> I have a JSF page like followed:
> >>
> >>
> >> <f:view xmlns="http://www.w3.org/1999/xhtml"
> >> xmlns:s="http://jboss.com/products/seam/taglib"
> >> xmlns:ui="http://java.sun.com/jsf/facelets"
> >> xmlns:f="http://java.sun.com/jsf/core"
> >> xmlns:h="http://java.sun.com/jsf/html"
> >> xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
> >> xmlns:tr="http://myfaces.apache.org/trinidad"
> >> xmlns:trh="http://myfaces.apache.org/trinidad/html" >
> >>
> >> <h:form id="editForm">
> >>
> >> <tr:selectOneRadio id="userAttributes"
> >> label="#{messages['selection']}"
> >> value="#{editAction.userAttribute}"
> >> required="true"
> >>
> >> requiredMessageDetail="#{messages['userAttribute.required']}" >
> >> <f:selectItems value="#{editAction.userAttributeList}"/>
> >> <a4j:support event="onclick" reRender="showCustomAttribute"
> >> />
> >>
> >> </tr:selectOneRadio>
> >> <a4j:outputPanel id="showCustomAttribute" >
> >> <tr:inputText id="customAttribute"
> >> label="#{messages['userAttribute.text']}"
> >> value="#{editAction.userAttribute.text}"
> >> rendered="#{editAction.userAttributeSelected}"
> >> required="true"
> >> />
> >> </a4j:outputPanel>
> >>
> >> <h:commandButton action="#{editAction..save}"
> >> value="#{messages['button.save']}" />
> >> <h:commandButton action="#{editAction..cancel}"
> >> value="#{messages['button.cancel']}" immediate="true" />
> >>
> >> </h:form>
> >>
> >> </f:view>
> >>
> >> The UserAttribute is a abstract class with 2 inheritances:
> >> BuildInAttribute and a CustomAttribute in which a text can added.
> >> If I left out the required="true" in my tr:inputText all works fine. If
> >> I define the attribute and I click on an instance of an new
> >> CustomAttribute I got the following StackTrace:
> >>
> >> 12:01:26,765 ERROR [SeamExceptionFilter] exception root cause
> >> java.lang.NullPointerException
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.EditableValueRenderer.addOnSubmitConverterValidators
> >>
> >> (EditableVal
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.encodeAllAsElement
> >>
> >> (SimpleInputTextRender
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.FormElementRenderer.encodeAll
> >>
> >> (FormElementRenderer.java:69)
> >> at
> >> org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer(
> >> CoreRenderer.java:297)
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.renderFieldCellContents
> >>
> >> (InputLabelA
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer._renderFieldCell
> >>
> >> (LabelAndMessageRenderer
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer.encodeAll
> >>
> >> (LabelAndMessageRenderer.java:2
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.encodeAll
> >>
> >> (InputLabelAndMessageRende
> >> at
> >> org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(
> >> CoreRenderer.java:184)
> >> at
> >> org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(
> >> UIXComponentBase.java:701)
> >> at
> >> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
> >>
> >> :249)
> >> at
> >> org.ajax4jsf.framework.renderer.RendererBase.renderChildren(
> >> RendererBase.java:225)
> >> at
> >> org.ajax4jsf.renderers.ajax.AjaxOutputPanelRenderer.encodeChildren(
> >> AjaxOutputPanelRenderer.java:74)
> >> at
> >> javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java
> >> :527)
> >> at
> >> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
> >>
> >> :245)
> >> at
> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> >> AjaxChildrenRenderer.java:120)
> >> at
> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> >> AjaxChildrenRenderer.java:111)
> >> at
> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> >> AjaxChildrenRenderer.java:111)
> >> at
> >> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> >> AjaxChildrenRenderer.java:111)
> >> at
> >> org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjax(
> >> AjaxContainerRenderer.java:126)
> >> at
> >> org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:570)
> >>
> >> at
> >> org.ajax4jsf.framework.ajax.AjaxContext.renderAjaxRegion(AjaxContext.java
> >> :301)
> >> at
> >> org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(
> >> AjaxViewHandler.java:249)
> >> at
> >> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(
> >> RenderResponseExecutor.java:41)
> >> at
> >> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
> >> at
> >> javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> ApplicationFilterChain.java:252)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> ApplicationFilterChain.java:173)
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter
> >>
> >> (TrinidadFilterImpl.java:210)
> >> at
> >>
> >> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl
> >>
> >> (TrinidadFilterImpl.java:167)
> >> at
> >> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(
> >> TrinidadFilterImpl.java:140)
> >> at
> >> org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(
> >> TrinidadFilter.java:93)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> ApplicationFilterChain.java:202)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> ApplicationFilterChain.java:173)
> >> at
> >> org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(
> >> BaseXMLFilter.java:75)
> >> at
> >> org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java
> >> :213)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> ApplicationFilterChain.java:202)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> ApplicationFilterChain.java:173)
> >> at
> >> org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java
> >>
> >> :29)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> ApplicationFilterChain.java:202)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> ApplicationFilterChain.java:173)
> >> at
> >> org.jboss.seam.servlet.SeamExceptionFilter.doFilter(
> >> SeamExceptionFilter.java:43)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> ApplicationFilterChain.java:202)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> ApplicationFilterChain.java:173)
> >> at
> >> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(
> >> ReplyHeaderFilter.java:96)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> >> ApplicationFilterChain.java:202)
> >> at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> >> ApplicationFilterChain.java:173)
> >> at
> >> org.apache.catalina.core.StandardWrapperValve.invoke(
> >> StandardWrapperValve.java:213)
> >> at
> >> org.apache.catalina.core.StandardContextValve.invoke(
> >> StandardContextValve.java:178)
> >> at
> >> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(
> >> SecurityAssociationValve.java:175)
> >> at
> >> org.jboss.web.tomcat.security.JaccContextValve.invoke(
> >> JaccContextValve.java:74)
> >> at
> >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
> >> :126)
> >> at
> >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
> >> :105)
> >> at
> >> org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(
> >> CachedConnectionValve.java:156)
> >> at
> >> org.apache.catalina.core.StandardEngineValve.invoke(
> >> StandardEngineValve.java:107)
> >> at
> >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> >> :148)
> >> at
> >> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
> >>
> >> at
> >>
> >> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
> >>
> >> (Http11BaseProtocol.java:664)
> >> at
> >> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
> >> PoolTcpEndpoint.java:527)
> >> at
> >> org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(
> >> MasterSlaveWorkerThread.java:112)
> >> at java.lang.Thread.run(Thread.java:619)
> >>
> >> All attribute in my class are initialized, so I don't think that the
> >> problem lies on the access of the text attribute in my CustomAttribute.
> >>
> >> Thanks for you help
> >> Marco
> >>
> >
>
>
--
Matthias Wessendorf
http://tinyurl.com/fmywh
further stuff:
blog: http://jroller.com/page/mwessendorf
mail: mwessendorf-at-gmail-dot-com
Re: Required attribute throws NullPointerException
Posted by Marco Huber <mh...@project-team.de>.
Thank you Adam for your response.
The solution putting the a4j component outside the form wouldn't work
for me, because I need both data (the selected item and the text) in my
action.
But you gave me a hint about the partial-page rendering. I removed the
a4j commonents and use now the partial-page rendering supported from
trinidad. At that was the solution.
If I put now the required=true attribute to my inputText it works as
espected.
Here my changed code, for those having a similar problem:
<tr:selectOneRadio id="userAttributes"
label="#{messages['selection']}"
value="#{editAction.userAttribute}"
required="true"
requiredMessageDetail="#{messages['userAttribute.required']}"
autoSubmit="true" >
<f:selectItems value="#{editAction.userAttributeList}"/>
</tr:selectOneRadio>
<tr:panelGroupLayout layout="horizontal" id="showCustomAttribute"
partialTriggers="editForm:userAttributes" >
<tr:inputText id="customAttribute"
label="#{messages['userAttribute.text']}"
value="#{editAction.userAttribute.text}"
rendered="#{editAction.userAttributeSelected}"
required="true" />
</tr:panelGroupLayout>
Thank you again
Marco
Adam Winer wrote:
> The problem is in how Ajax4JSF handles partial-page rendering. It skips
> over the form component entirely, so the Trinidad RenderingContext does
> not have a FormData object attached.
>
> Any Trinidad component that has client-side validation will result in the
> same error.
>
> Trinidad implements partial-page rendering very differently, using
> ResponseWriter
> filtering to only render the necessary component.
>
> You'd have to move the appropriate a4j: component outside of the h:form
> to get it working.
>
> -- Adam
>
>
>
> On 3/1/07, Marco Huber <mh...@project-team.de> wrote:
>>
>> Hi all,
>>
>> I have the problem that a required attribute throws a npe, but I can't
>> figured out where the problem lies. I hope some can help me on this
>> issue.
>>
>> I have a JSF page like followed:
>>
>>
>> <f:view xmlns="http://www.w3.org/1999/xhtml"
>> xmlns:s="http://jboss.com/products/seam/taglib"
>> xmlns:ui="http://java.sun.com/jsf/facelets"
>> xmlns:f="http://java.sun.com/jsf/core"
>> xmlns:h="http://java.sun.com/jsf/html"
>> xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
>> xmlns:tr="http://myfaces.apache.org/trinidad"
>> xmlns:trh="http://myfaces.apache.org/trinidad/html" >
>>
>> <h:form id="editForm">
>>
>> <tr:selectOneRadio id="userAttributes"
>> label="#{messages['selection']}"
>> value="#{editAction.userAttribute}"
>> required="true"
>>
>> requiredMessageDetail="#{messages['userAttribute.required']}" >
>> <f:selectItems value="#{editAction.userAttributeList}"/>
>> <a4j:support event="onclick" reRender="showCustomAttribute"
>> />
>>
>> </tr:selectOneRadio>
>> <a4j:outputPanel id="showCustomAttribute" >
>> <tr:inputText id="customAttribute"
>> label="#{messages['userAttribute.text']}"
>> value="#{editAction.userAttribute.text}"
>> rendered="#{editAction.userAttributeSelected}"
>> required="true"
>> />
>> </a4j:outputPanel>
>>
>> <h:commandButton action="#{editAction..save}"
>> value="#{messages['button.save']}" />
>> <h:commandButton action="#{editAction..cancel}"
>> value="#{messages['button.cancel']}" immediate="true" />
>>
>> </h:form>
>>
>> </f:view>
>>
>> The UserAttribute is a abstract class with 2 inheritances:
>> BuildInAttribute and a CustomAttribute in which a text can added.
>> If I left out the required="true" in my tr:inputText all works fine. If
>> I define the attribute and I click on an instance of an new
>> CustomAttribute I got the following StackTrace:
>>
>> 12:01:26,765 ERROR [SeamExceptionFilter] exception root cause
>> java.lang.NullPointerException
>> at
>>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.EditableValueRenderer.addOnSubmitConverterValidators
>>
>> (EditableVal
>> at
>>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.encodeAllAsElement
>>
>> (SimpleInputTextRender
>> at
>>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.FormElementRenderer.encodeAll
>>
>> (FormElementRenderer.java:69)
>> at
>> org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer(
>> CoreRenderer.java:297)
>> at
>>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.renderFieldCellContents
>>
>> (InputLabelA
>> at
>>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer._renderFieldCell
>>
>> (LabelAndMessageRenderer
>> at
>>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer.encodeAll
>>
>> (LabelAndMessageRenderer.java:2
>> at
>>
>> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.encodeAll
>>
>> (InputLabelAndMessageRende
>> at
>> org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(
>> CoreRenderer.java:184)
>> at
>> org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(
>> UIXComponentBase.java:701)
>> at
>> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
>>
>> :249)
>> at
>> org.ajax4jsf.framework.renderer.RendererBase.renderChildren(
>> RendererBase.java:225)
>> at
>> org.ajax4jsf.renderers.ajax.AjaxOutputPanelRenderer.encodeChildren(
>> AjaxOutputPanelRenderer.java:74)
>> at
>> javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java
>> :527)
>> at
>> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
>>
>> :245)
>> at
>> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> AjaxChildrenRenderer.java:120)
>> at
>> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> AjaxChildrenRenderer.java:111)
>> at
>> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> AjaxChildrenRenderer.java:111)
>> at
>> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
>> AjaxChildrenRenderer.java:111)
>> at
>> org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjax(
>> AjaxContainerRenderer.java:126)
>> at
>> org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:570)
>>
>> at
>> org.ajax4jsf.framework.ajax.AjaxContext.renderAjaxRegion(AjaxContext.java
>> :301)
>> at
>> org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(
>> AjaxViewHandler.java:249)
>> at
>> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(
>> RenderResponseExecutor.java:41)
>> at
>> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
>> at
>> javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:252)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>> at
>>
>> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter
>>
>> (TrinidadFilterImpl.java:210)
>> at
>>
>> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl
>>
>> (TrinidadFilterImpl.java:167)
>> at
>> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(
>> TrinidadFilterImpl.java:140)
>> at
>> org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(
>> TrinidadFilter.java:93)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:202)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>> at
>> org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(
>> BaseXMLFilter.java:75)
>> at
>> org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java
>> :213)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:202)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>> at
>> org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java
>>
>> :29)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:202)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>> at
>> org.jboss.seam.servlet.SeamExceptionFilter.doFilter(
>> SeamExceptionFilter.java:43)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:202)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>> at
>> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(
>> ReplyHeaderFilter.java:96)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:202)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>> at
>> org.apache.catalina.core.StandardWrapperValve.invoke(
>> StandardWrapperValve.java:213)
>> at
>> org.apache.catalina.core.StandardContextValve.invoke(
>> StandardContextValve.java:178)
>> at
>> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(
>> SecurityAssociationValve.java:175)
>> at
>> org.jboss.web.tomcat.security.JaccContextValve.invoke(
>> JaccContextValve.java:74)
>> at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
>> :126)
>> at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
>> :105)
>> at
>> org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(
>> CachedConnectionValve.java:156)
>> at
>> org.apache.catalina.core.StandardEngineValve.invoke(
>> StandardEngineValve.java:107)
>> at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
>> :148)
>> at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>>
>> at
>>
>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
>>
>> (Http11BaseProtocol.java:664)
>> at
>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
>> PoolTcpEndpoint.java:527)
>> at
>> org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(
>> MasterSlaveWorkerThread.java:112)
>> at java.lang.Thread.run(Thread.java:619)
>>
>> All attribute in my class are initialized, so I don't think that the
>> problem lies on the access of the text attribute in my CustomAttribute.
>>
>> Thanks for you help
>> Marco
>>
>
Re: Required attribute throws NullPointerException
Posted by Adam Winer <aw...@gmail.com>.
The problem is in how Ajax4JSF handles partial-page rendering. It skips
over the form component entirely, so the Trinidad RenderingContext does
not have a FormData object attached.
Any Trinidad component that has client-side validation will result in the
same error.
Trinidad implements partial-page rendering very differently, using
ResponseWriter
filtering to only render the necessary component.
You'd have to move the appropriate a4j: component outside of the h:form
to get it working.
-- Adam
On 3/1/07, Marco Huber <mh...@project-team.de> wrote:
>
> Hi all,
>
> I have the problem that a required attribute throws a npe, but I can't
> figured out where the problem lies. I hope some can help me on this issue.
>
> I have a JSF page like followed:
>
>
> <f:view xmlns="http://www.w3.org/1999/xhtml"
> xmlns:s="http://jboss.com/products/seam/taglib"
> xmlns:ui="http://java.sun.com/jsf/facelets"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
> xmlns:tr="http://myfaces.apache.org/trinidad"
> xmlns:trh="http://myfaces.apache.org/trinidad/html" >
>
> <h:form id="editForm">
>
> <tr:selectOneRadio id="userAttributes"
> label="#{messages['selection']}"
> value="#{editAction.userAttribute}"
> required="true"
>
> requiredMessageDetail="#{messages['userAttribute.required']}" >
> <f:selectItems value="#{editAction.userAttributeList}"/>
> <a4j:support event="onclick" reRender="showCustomAttribute"
> />
>
> </tr:selectOneRadio>
> <a4j:outputPanel id="showCustomAttribute" >
> <tr:inputText id="customAttribute"
> label="#{messages['userAttribute.text']}"
> value="#{editAction.userAttribute.text}"
> rendered="#{editAction.userAttributeSelected}"
> required="true"
> />
> </a4j:outputPanel>
>
> <h:commandButton action="#{editAction..save}"
> value="#{messages['button.save']}" />
> <h:commandButton action="#{editAction..cancel}"
> value="#{messages['button.cancel']}" immediate="true" />
>
> </h:form>
>
> </f:view>
>
> The UserAttribute is a abstract class with 2 inheritances:
> BuildInAttribute and a CustomAttribute in which a text can added.
> If I left out the required="true" in my tr:inputText all works fine. If
> I define the attribute and I click on an instance of an new
> CustomAttribute I got the following StackTrace:
>
> 12:01:26,765 ERROR [SeamExceptionFilter] exception root cause
> java.lang.NullPointerException
> at
>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.EditableValueRenderer.addOnSubmitConverterValidators
> (EditableVal
> at
>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.encodeAllAsElement
> (SimpleInputTextRender
> at
>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.FormElementRenderer.encodeAll
> (FormElementRenderer.java:69)
> at
> org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer(
> CoreRenderer.java:297)
> at
>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.renderFieldCellContents
> (InputLabelA
> at
>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer._renderFieldCell
> (LabelAndMessageRenderer
> at
>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.LabelAndMessageRenderer.encodeAll
> (LabelAndMessageRenderer.java:2
> at
>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.encodeAll
> (InputLabelAndMessageRende
> at
> org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(
> CoreRenderer.java:184)
> at
> org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(
> UIXComponentBase.java:701)
> at
> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
> :249)
> at
> org.ajax4jsf.framework.renderer.RendererBase.renderChildren(
> RendererBase.java:225)
> at
> org.ajax4jsf.renderers.ajax.AjaxOutputPanelRenderer.encodeChildren(
> AjaxOutputPanelRenderer.java:74)
> at
> javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java
> :527)
> at
> org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java
> :245)
> at
> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> AjaxChildrenRenderer.java:120)
> at
> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> AjaxChildrenRenderer.java:111)
> at
> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> AjaxChildrenRenderer.java:111)
> at
> org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChild(
> AjaxChildrenRenderer.java:111)
> at
> org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjax(
> AjaxContainerRenderer.java:126)
> at
> org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:570)
> at
> org.ajax4jsf.framework.ajax.AjaxContext.renderAjaxRegion(AjaxContext.java
> :301)
> at
> org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(
> AjaxViewHandler.java:249)
> at
> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(
> RenderResponseExecutor.java:41)
> at
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:252)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> at
>
> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter
> (TrinidadFilterImpl.java:210)
> at
>
> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl
> (TrinidadFilterImpl.java:167)
> at
> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(
> TrinidadFilterImpl.java:140)
> at
> org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(
> TrinidadFilter.java:93)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> at
> org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(
> BaseXMLFilter.java:75)
> at
> org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java
> :213)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> at
> org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java
> :29)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> at
> org.jboss.seam.servlet.SeamExceptionFilter.doFilter(
> SeamExceptionFilter.java:43)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> at
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(
> ReplyHeaderFilter.java:96)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:213)
> at
> org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:178)
> at
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(
> SecurityAssociationValve.java:175)
> at
> org.jboss.web.tomcat.security.JaccContextValve.invoke(
> JaccContextValve.java:74)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
> :126)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
> :105)
> at
> org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(
> CachedConnectionValve.java:156)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:107)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> :148)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
> at
>
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
> (Http11BaseProtocol.java:664)
> at
> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
> PoolTcpEndpoint.java:527)
> at
> org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(
> MasterSlaveWorkerThread.java:112)
> at java.lang.Thread.run(Thread.java:619)
>
> All attribute in my class are initialized, so I don't think that the
> problem lies on the access of the text attribute in my CustomAttribute.
>
> Thanks for you help
> Marco
>