webtier@glassfish.java.net

Re: [webtier] Question about Jim Driscoll's Ajax EditText Component Example

From: Lincoln Baxter, III <lincolnbaxter_at_gmail.com>
Date: Sat, 07 Feb 2009 11:37:28 -0500

I tried to trace the exception but it goes into the
ViewRoot.processApplication() method, and for some reason I can't
visually debug through it. Somewhere in that method call is where the
NPE originates.

Ok, so here's what I'm trying to do in my view:

<a:editText value="#{viewProjectBean.projectGoals}"
actionListener="#{myBean.listenerSignatureMethod}" />

And here's my component. I've tried various methods of attaching the
action listener (actionSource, usingPageChildren, etc...) all with the
same result, the listener is not called. I've tried using a
valueChangeListener on the inputText field itself (this would be the
best case scenario I think):

<!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:composite="http://java.sun.com/jsf/composite">

<composite:interface name="editText"
        displayName="Editable Text Component"
        shortDescription="Editable Text Component">
         <composite:attribute name="actionListener" required="true" />
        <composite:attribute name="value" required="true" type="String" />
</composite:interface>

<composite:implementation>
        <h:outputScript name="jsf.js" library="javax.faces" target="head" />
        <h:outputScript name="ajax/editText.js" target="head" />
        <h:outputStylesheet name="ajax/editText.css" />
        <script type="text/javascript">
        init("#{compositeComponent.clientId}",
"#{compositeComponent.attrs.value}");
    </script>
        <h:panelGroup id="edit1">
                <h:outputLink id="editLink" title="Click to edit"
                        styleClass="editLink"
                        onclick="return
linkClick('#{compositeComponent.clientId}');">#{compositeComponent.attrs.value}</h:outputLink>
        </h:panelGroup>
        <h:panelGroup id="edit2" style="display:none;">
                <h:inputText id="editInput" value="#{compositeComponent.attrs.value}"
                        styleClass="editInput" />
                <h:commandButton value="Submit" id="submit"
actionListener="#{compositeComponent.attrs.actionListener}"
                        onclick="return submitButton('#{compositeComponent.clientId}',
event);">
                        <f:ajax execute="submit editInput" render="editLink" />
                </h:commandButton>
                <h:commandButton value="Cancel" id="cancel" styleClass="faded"
                        onclick="return cancelButton('#{compositeComponent.clientId}');" />
        </h:panelGroup>
</composite:implementation>



These attempts result in a NPE:


com.ocpsoft.storylib.exceptions.SiteRuntimeException:
java.lang.NullPointerException
        at
com.ocpsoft.storylib.jsf.filter.ExceptionFilter.wrapException(ExceptionFilter.java:62)
        at
com.ocpsoft.storylib.jsf.filter.ExceptionFilter.doFilter(ExceptionFilter.java:47)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint
$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
        at java.io.Writer.write(Writer.java:140)
        at
com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:193)
        at
com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:120)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:116)
        at
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.springframework.security.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:359)


On Thu, 2009-02-05 at 10:54 -0800, webtier_at_javadesktop.org wrote:

> Hey Jim,
>
> Yeah your example works great actually. When I get access to my PC I'll send my examples.
>
> The reason I'm adding the actionListener tag is because I want to be able to take an action once the value has been submitted back to the server.
>
> Right now I am getting around it by using a field in my Managed bean as an intermediary between editText and the nested object field I wish to update. (object.child.field) So editText triggers the setField(String value) method to be called, which in turn is doing a database update in the setter itself.
>
> What I prefer, is to be able to set the value into the object directly, then trigger an action method or actionlistener to be called, which will perform the database update on that object.
>
> This workaround fails, however, as soon as I want to use a <ui:repeat> tag to display a list of components, each of which is editable.
>
> Is there a simple answer I'm missing?
>
> Thanks,
> Lincoln
> [Message sent by forum member 'lincolnbaxter' (lincolnbaxter)]
>
> http://forums.java.net/jive/thread.jspa?messageID=330360
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: webtier-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: webtier-help_at_glassfish.dev.java.net
>