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:4‌​19)  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

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -