Hi Martin, I had seen the configs in the struts-showcase, and used all of them as-is ; just added a javascript fn. to invoke DWR and was getting the NPE. So, looks like there's something broken in the default distro. I'll try your suggestion of using :
* public* ActionProxy createActionProxy(String namespace, String actionName, String methodName, Map<String, Object> extraContext, *boolean*executeResult, *boolean* cleanupContext); instead of : *public* ActionProxy createActionProxy(ActionInvocation actionInvocation, String namespace, String actionName, String methodName,*boolean*executeResult, *boolean* cleanupContext); Hope this is what you meant? Thanks, Joseph On Fri, May 15, 2009 at 3:40 AM, Martin Gainty <mgai...@hotmail.com> wrote: > > the DWR configuration you will need is located at > struts-showcase\WEB-INF\dwr.xml > > <?xml version="1.0" encoding="UTF-8"?> > <!-- START SNIPPET: dwr --> > <!DOCTYPE dwr PUBLIC > "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" > "http://www.getahead.ltd.uk/dwr/dwr10.dtd"> > <dwr> > <allow> > <create creator="new" javascript="validator"> > <param name="class" > value="org.apache.struts2.validators.DWRValidator"/> > </create> > <convert converter="bean" > match="com.opensymphony.xwork2.ValidationAwareSupport"/> > </allow> > <signatures> > <![CDATA[ > import java.util.Map; > import org.apache.struts2.validators.DWRValidator; > > DWRValidator.doPost(String, String, Map<String, String>); > ]]> > </signatures> > </dwr> > <!-- END SNIPPET: dwr --> > > where the servlet would be defined in WEB-INF/web.xml configuration > <servlet> > <servlet-name>dwr</servlet-name> > <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> > <init-param> > <param-name>debug</param-name> > <param-value>true</param-value> > </init-param> > </servlet> > <servlet-mapping> > <servlet-name>dwr</servlet-name> > <url-pattern>/dwr/*</url-pattern> > </servlet-mapping> > > the config files struts.xml or struts-default.xml would contain the bean > definitions for OgnlValueStackFactory e.g. > > <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" > class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory" /> > > <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="xwork" > class="com.opensymphony.xwork2.DefaultActionProxyFactory"/> > > your webapp's > execution flow is governed by interceptors you insert into (defaultStack) > interceptor stack declaration as seen here > <interceptor-stack name="defaultStack"> > <interceptor-ref name="exception"/> > <interceptor-ref name="alias"/> > <interceptor-ref name="servletConfig"/> > <interceptor-ref name="i18n"/> > <interceptor-ref name="prepare"/> > <interceptor-ref name="chain"/> > <interceptor-ref name="debugging"/> > <interceptor-ref name="profiling"/> > <interceptor-ref name="scopedModelDriven"/> > <interceptor-ref name="modelDriven"/> > <interceptor-ref name="fileUpload"/> > <interceptor-ref name="checkbox"/> > <interceptor-ref name="staticParams"/> > <interceptor-ref name="actionMappingParams"/> > <interceptor-ref name="params"> > <param name="excludeParams">dojo\..*,^struts\..*</param> > </interceptor-ref> > <interceptor-ref name="conversionError"/> > <interceptor-ref name="validation"> > <param > name="excludeMethods">input,back,cancel,browse</param> > </interceptor-ref> > <interceptor-ref name="workflow"> > <param > name="excludeMethods">input,back,cancel,browse</param> > </interceptor-ref> > </interceptor-stack> > > The ActionProxyFactory is used to create ActionProxies to be executed. It > is the entry point to XWork that is used > by a dispatcher to create an ActionProxy to execute for a particular > namespace and action name. > > where xwork 1.2.3 specifies createActionProxy with 5 parameters > createActionProxy(String namespace, > String actionName, > Map extraContext, > boolean executeResult, > boolean cleanupContext) > > > Creates an ActionProxy for the given namespace and action name by looking > up the configuration. > > instead of > ActionProxy proxy = actionProxyFactory.createActionProxy(inv, namespace, > > mapping.getName(), mapping.getMethod(), *true*, *true*); > > switch the 1st arg of inv (assuming that contains action) and 2nd arg of > namespace(assuming that contains namespace) and drop getMethod() unless of > course that has the desired extraContext > then proxy.execute() > will set the ActionContext from the ActionInvocation into the desired > ActionContext > > documentation available at > > http://struts.apache.org/2.1.6/struts2-core/apidocs/com/opensymphony/xwork2/ActionProxy.html > > hope that answers your question > Martin > ______________________________________________ > Disclaimer and Confidentiality/Verzicht und Vertraulichkeitanmerkung/Note > de déni et de confidentialité > This message is confidential. If you should not be the intended receiver, > then we ask politely to report. Each unauthorized forwarding or > manufacturing of a copy is inadmissible. This message serves only for the > exchange of information and has no legal binding effect. Due to the easy > manipulation of emails we cannot take responsibility over the the contents. > Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene > Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte > Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht > dient lediglich dem Austausch von Informationen und entfaltet keine > rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von > E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen. > Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le > destinataire prévu, nous te demandons avec bonté que pour satisfaire > informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie > de ceci est interdite. Ce message sert à l'information seulement et n'aura > pas n'importe quel effet légalement obligatoire. Étant donné que les email > peuvent facilement être sujets à la manipulation, nous ne pouvons accepter > aucune responsabilité pour le contenu fourni. > > > > > > Date: Fri, 15 May 2009 01:50:27 +0530 > > Subject: Re: DWRValidator not working in Struts 2.1.6 > > From: strutstwou...@gmail.com > > To: user@struts.apache.org > > > > martin, > > > > i had seen the StrutsPrepareFilter API and as it says "Prepares the > request > > for execution by a later StrutsExecuteFilter filter instance. " . I've > both > > the StrutsPrepare and Execute filters configured plus the DWR servlet. > > > > You were mentioning a working example of DWRValidator in the showcase, > but i > > couldn't find it. > > > > My understanding is that when a DWR request is sent - it goes thru > > StrutsPrepareFilter , StrutsExecuteFilter (which executes the Action > > preceded by interceptor stack) , finally DWRServlet. So, by the time the > > request reaches DWRServlet, it would have done the validations and the > > errors would be populated. > > > > The point i'm confused is that in DWRValidator doPost method, there's > again > > a call to execute the Action like : > > > > ActionProxy proxy = actionProxyFactory.createActionProxy(inv, namespace, > > mapping.getName(), mapping.getMethod(), *true*, *true*); > > proxy.execute(); > > and this fails for some reason since valuestackfactory is null. > > > > Thanks, > > Joseph > > > > On Fri, May 15, 2009 at 1:22 AM, Martin Gainty <mgai...@hotmail.com> > wrote: > > > > > > > > StrutsPrepareFilter documentation is available at > > > > > > > http://struts.apache.org/2.1.6/struts2-core/apidocs/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareFilter.html > > > > > > there is a brand new feature that musachy put in svn on monday to > > > specifically work-around action execute > > > i would ping him to see if this made was built into latest distro > > > > > > Thanks, > > > Martin Gainty > > > ______________________________________________ > > > Disclaimer and Confidentiality/Verzicht und > Vertraulichkeitanmerkung/Note > > > de déni et de confidentialité > > > This message is confidential. If you should not be the intended > receiver, > > > then we ask politely to report. Each unauthorized forwarding or > > > manufacturing of a copy is inadmissible. This message serves only for > the > > > exchange of information and has no legal binding effect. Due to the > easy > > > manipulation of emails we cannot take responsibility over the the > contents. > > > Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene > > > Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede > unbefugte > > > Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese > Nachricht > > > dient lediglich dem Austausch von Informationen und entfaltet keine > > > rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von > > > E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen. > > > Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas > le > > > destinataire prévu, nous te demandons avec bonté que pour satisfaire > > > informez l'expéditeur. N'importe quelle diffusion non autorisée ou la > copie > > > de ceci est interdite. Ce message sert à l'information seulement et > n'aura > > > pas n'importe quel effet légalement obligatoire. Étant donné que les > email > > > peuvent facilement être sujets à la manipulation, nous ne pouvons > accepter > > > aucune responsabilité pour le contenu fourni. > > > > > > > > > > > > > > > > Date: Thu, 14 May 2009 23:55:34 +0530 > > > > Subject: Re: DWRValidator not working in Struts 2.1.6 > > > > From: strutstwou...@gmail.com > > > > To: mgai...@hotmail.com; user@struts.apache.org > > > > > > > > Just wanted to make sure my email reached the full users' list. I > > > > still havent been able to make any progress on this. Has anyone got > > > > the DWRValidator working in Struts 2.1? > > > > > > > > On 4/24/09, j alex <strutstwou...@gmail.com> wrote: > > > > > Martin, > > > > > > > > > > I want DWRServlet to handle only the Action validations, not Action > > > > > execution. I'm invoking the validator.doPost() when user tabs off a > > > field > > > > > in > > > > > order to validate the entered data. > > > > > > > > > > I couldn't find the example you are referring to in > > > > > http://struts.apache.org/2.1.6/docs/tutorials.html . Could you > please > > > tell > > > > > me a specific link ? > > > > > > > > > > Thanks > > > > > s2user > > > > > > > > > > > > > > > > > > > > On Fri, Apr 24, 2009 at 7:50 PM, Martin Gainty < > mgai...@hotmail.com> > > > wrote: > > > > > > > > > >> who handles the action execution DWRServlet or > > > > >> StrutsPrepareAndExecuteFilter? > > > > >> > > > > >> If you want to use DWRServlet to handle action execution you are > > > better > > > > >> off > > > > >> just using StrutsPrepareFilter to prepare the request as in this > > > example > > > > >> > > > > >> > > > > >> > > > > http://struts.apache.org/2.1.6/struts2-core/apidocs/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareFilter.html > > > > >> > > > > >> web.xml entry > > > > >> <filter> > > > > >> <filter-name>struts-prepare</filter-name> > > > > >> > > > > >> > > > > <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> > > > > >> <init-param> > > > > >> <param-name>actionPackages</param-name> > > > > >> > > > <param-value>org.apache.struts2.showcase.person</param-value> > > > > >> </init-param> > > > > >> </filter> > > > > >> > > > > >> There is a very good example of StrutsPrepareFilter functionality > > > working > > > > >> in combination with DWRServlet in struts2-showcase tutorial > located at > > > > >> > > > > >> > > > > >> > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > > > For additional commands, e-mail: user-h...@struts.apache.org > > > > > > > > > > _________________________________________________________________ > > > Hotmail® has a new way to see what's up with your friends. > > > > > > > http://windowslive.com/Tutorial/Hotmail/WhatsNew?ocid=TXT_TAGLM_WL_HM_Tutorial_WhatsNew1_052009 > > > > > _________________________________________________________________ > Insert movie times and more without leaving Hotmail®. > > http://windowslive.com/Tutorial/Hotmail/QuickAdd?ocid=TXT_TAGLM_WL_HM_Tutorial_QuickAdd1_052009 >