У меня есть действие, в котором я пытаюсь войти в систему.
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, а затем заполняю это сообщение об исключении в моем поле Error. Я даже пытался добавить ошибку действия.
С некоторыми советами и поиском в Интернете мне удалось использовать перехватчик хранилища сообщений, используя аннотации в 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) динамически включается в главную страницу.
Моя страница.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. :(
convention plugin
, почему вы все еще используете xml? - person Jaiwo99   schedule 16.11.2012@InterceptorRefs
аннотации? - person Aleksandr M   schedule 16.11.2012