java - How to pass a action name using hyperlink in Struts 2? -
i have hyperlink named "click new user". once click link, got nullpointerexception instead of opening registerpage.jsp page.
i post code here, can't find mistake
index.jsp:
<s:form action="verify"> <s:textfield name="username" key="label.uname" required="true"/> <s:password name="password" key="label.pass" required="true"/> <s:submit value="login" align="center"/> </s:form> <a href="<s:url action='register'/>">click new user</a> struts.xml:
<struts> <package name="a" extends="struts-default"> <action name="verify" class="java4s.login" method="execute"> <result name="success">loginsuccess.jsp</result> <result name="error">error.jsp</result> <result name="input">index.jsp</result> </action> <action name="register" class="java4s.login" method="register"> <result name="success">registerpage.jsp</result> </action> </package> </struts> login.java(action class):
package java4s; import com.opensymphony.xwork2.actionsupport; public class login extends actionsupport { private static final long serialversionuid = 1l; private string username,password; public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } public string register(){ system.out.println("register ()"); return success; } public string execute(){ if (getusername().equals("java4s")&&getpassword().equals("java4s")) { return success; } else { this.addactionerror(gettext("u.p.wrong")); return error; } } @override public void validate() { if (getusername().equals("")||getusername().length()==0) this.addfielderror("username",gettext("error.uname")); if(getpassword().equals("")||getpassword().length()==0) this.addfielderror("password", gettext("error.pass")); } } exception:
javax.servlet.servletexception: java.lang.nullpointerexception org.apache.struts2.dispatcher.dispatcher.serviceaction(dispatcher.java:515) org.apache.struts2.dispatcher.filterdispatcher.dofilter(filterdispatcher.java:419) java.lang.nullpointerexception java4s.login.validate(login.java:38) com.opensymphony.xwork2.interceptor.defaultworkflowinterceptor.dointercept(defaultworkflowinterceptor.java:200) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:86) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.validator.validationinterceptor.dointercept(validationinterceptor.java:150) org.apache.struts2.interceptor.validation.annotationvalidationinterceptor.dointercept(annotationvalidationinterceptor.java:48) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:86) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.conversionerrorinterceptor.intercept(conversionerrorinterceptor.java:123) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.parametersinterceptor.dointercept(parametersinterceptor.java:167) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:86) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.staticparametersinterceptor.intercept(staticparametersinterceptor.java:105) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) org.apache.struts2.interceptor.checkboxinterceptor.intercept(checkboxinterceptor.java:83) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) org.apache.struts2.interceptor.fileuploadinterceptor.intercept(fileuploadinterceptor.java:207) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.modeldriveninterceptor.intercept(modeldriveninterceptor.java:74) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.scopedmodeldriveninterceptor.intercept(scopedmodeldriveninterceptor.java:127) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) org.apache.struts2.interceptor.profilingactivationinterceptor.intercept(profilingactivationinterceptor.java:107) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) org.apache.struts2.interceptor.debugging.debugginginterceptor.intercept(debugginginterceptor.java:206) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.chaininginterceptor.intercept(chaininginterceptor.java:115) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.i18ninterceptor.intercept(i18ninterceptor.java:143) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.prepareinterceptor.dointercept(prepareinterceptor.java:121) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:86) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) org.apache.struts2.interceptor.servletconfiginterceptor.intercept(servletconfiginterceptor.java:170) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.aliasinterceptor.intercept(aliasinterceptor.java:123) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) com.opensymphony.xwork2.interceptor.exceptionmappinginterceptor.intercept(exceptionmappinginterceptor.java:176) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:224) com.opensymphony.xwork2.defaultactioninvocation$2.doprofiling(defaultactioninvocation.java:223) com.opensymphony.xwork2.util.profiling.utiltimerstack.profile(utiltimerstack.java:455) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:221) org.apache.struts2.impl.strutsactionproxy.execute(strutsactionproxy.java:50) org.apache.struts2.dispatcher.dispatcher.serviceaction(dispatcher.java:504) org.apache.struts2.dispatcher.filterdispatcher.dofilter(filterdispatcher.java:419)
when click on hyperlink don't supply request url parameters username , password (the parameters aren't set params interceptor), values of properties null validate() method called before action executed because action extend actionsupport implemented validateable , validationaware allows validation interceptor (which part of defaultstack) execute validate() method perform manual checks , provide actionerrors, fielderrors, , actionmessages. there's no reason if don't provide values properties. should either submit form or set parameters in url
<a id="mylink" href="#">click new user</a> <script type="text/javascript> $(document).ready(function(){ $('#mylink').click(function(e) { window.location="<s:url action='register'/>"+"?username="+$('username').val()+"&password="+$('password').val(); return false; }); }); </script> but problem parameter values (username , password) sensitive information , shouldn't pass in url. , should use either ajax post or submit form post request in this example.
when using manual validations useful utilize apache commons validator
if (genericvalidator.isblankornull(value)) addfielderror("fieldlabel", messageformat.format(gettext("errorkey"), gettext("fieldlabel"), new object {})); the similar code done actionerrors and/or actionmessages. other validators available in commons-validator package, or use struts2 validators out of question.
Comments
Post a Comment