我有一个尝试登录用户的操作。
public class RegisteredUserAction extends ActionSupport implements SessionAware { .. .. public String login() throws Exception { DBLogic dBLogic = new DBLogic(); RegisteredUser user = null; try { user = dBLogic.getRegisteredUser(getUserUsername(), getUserPassword()); } catch (CredentialException e) { addFieldError("userUsername", e.getMessage()); addActionError(e.getMessage()); return INPUT; } if (user != null) { session.put("user", user); return SUCCESS; } return ERROR; } }
如您所见,如果用户名或密码无效,则抛出CredentialException,然后在fieldError中填充该异常消息。我什至尝试添加操作错误。
通过一些建议和在线搜索,我设法通过分别在RegisteredUserAction.action和MainAction.action中分别使用注释和存储来使用消息存储拦截器。
import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.InterceptorRefs; @InterceptorRefs({ @InterceptorRef(value = "store", params = {"operationMode", "STORE"}), @InterceptorRef("defaultStack"),})
和
import org.apache.struts2.convention.annotation.InterceptorRefs; @InterceptorRefs({ @InterceptorRef(value = "store", params = {"operationMode", "RETRIEVE"}), @InterceptorRef("defaultStack"),})
这是相关的struts.xml文件内容:
<package name="pages" extends="struts-default" namespace="/"> <global-results> <result name="displayPage">/WEB-INF/template/page.jsp</result> <result name="input">/WEB-INF/template/page.jsp</result> </global-results> <action name="registrationPage" class="actions.MainAction" method="loadRegistrationPage"></action> <action name="loginPage" class="actions.MainAction" method="loadLoginPage"></action> </package> <package name="operations" extends="struts-default" namespace="/"> <action name="userLogin" class="actions.RegisteredUserAction" method="login"> <result type="redirect" name="input">loginPage.action</result> <result type="redirect" name="success">homePage.action</result> </action> </package>
我正在使用基于模板的方法,其中将中间内容(在我的情况下为LoginPage.jsp)动态地包含在主页中。
我的page.jsp(包括mainContent):
<s:include value="../%{mainContent}.jsp" ></s:include>
我的login.jsp(包含在内):
<%@taglib prefix="s" uri="/struts-tags"%> <s:form action="userLogin" method="POST"> <s:textfield name="userUsername" />Error:<s:fielderror name="userUsername" /> <s:password name="userPassword" /> <s:submit /> </s:form>
重定向正常工作,并且显示登录表单,但没有错误。我什至尝试过在struts.xml中使用消息存储拦截器,但是没有运气。:(
使用redirectActionresult代替redirect。并尝试使用struts.xml文件中的配置而不是注释。
redirectAction
redirect
struts.xml
<action name="userLogin" class="actions.RegisteredUserAction" method="login"> <interceptor-ref name="store"> <param name="operationMode">STORE</param> </interceptor-ref> <interceptor-ref name="defaultStack" /> <result type="redirectAction" name="input">loginPage</result> <result type="redirectAction" name="success">homePage</result> </action>