我在
中定义了以下内容struts-config.xml
:
<struts-config>
<form-beans>
<form-bean name="LoginForm" type="com.actionform.LoginForm"/>
</form-beans>
<action-mappings>
<!-- action for login -->
<action input="/views/login.jsp" name="LoginForm" path="/Login" scope="session" type="com.actions.LoginAction"
parameter="method" validate="true">
<forward name="success" path="/views/Frameset.html" />
</action>
</action-mappings>
<message-resources parameter="/WEB-INF/ApplicationResources"/>
<!-- ========================= Validator plugin ================================= -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
登录表单:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (userName == null || userName.length() < 1) {
System.out.println("in validate ---");
errors.add("userName", new ActionMessage("error.userName.required"));
// TODO: add 'error.name.required' key to your resources
}
if (password == null || password.length() < 1) {
errors.add("password", new ActionMessage("error.password.required"));
// TODO: add 'error.name.required' key to your resources
}
return errors;
}
login.jsp
:
<html:form action="/Login?method=loginUser">
<html:errors/>
<html:text name="LoginForm" property="userName" />
<html:messages id="err_userName" property="userName">
<bean:write name="err_userName" />
</html:messages>
</html:form>
房产档案:
error.userName.required = User Name is required.
error.password.required = Password is required.
我哪里做错了?我收到以下错误
javax.servlet.jsp.JspException:无法在任何范围内找到 bean 错误
我只想在同一个JSP中显示错误。
获得包含要在输入页面中显示的消息或错误的
ActionMessages
/ActionErrors
对象(使用 <html:messages>
标签或 <html:errors>
标签)后,您必须从您的应用程序调用以下方法之一: Action
对象将验证结果放入范围内:
addMessages(HttpServletRequest request, ActionMessages messages)
或
addErrors(HttpServletRequest request, ActionMessages errors)
你在这样做吗?
我真的不关心struts如何处理异常。通常在覆盖
RequestProcesor
时使用 1.2 中的旧原始代码,我可能应该替换这两种方法 - process 和 processException
。第一件事是在 processValidation
发出后捕获请求中的异常。代码片段可能看起来像
Exception exception = null;
if (needValidation)
try {
if (! processValidate(request, response, form, mapping)) {
return;
}
exception = (Exception)request.getAttribute(Globals.EXCEPTION_KEY);
} catch (InvalidCancelException ex) {
exception = ex;
}
ActionForward forward;
// Check out if exception occurred
if (exception != null){
forward = processException(request, response, exception, form, mapping);
如果您已经配置了错误转发,那么第二个就非常简单了。错误转发通常是从映射中容易找到的全局转发之一。一旦找到,它就会在页面上显示您的错误消息。我认为这些可能足以处理异常
exception.printStackTrace();
log.error(exception);
request.setAttribute("error", exception.getMessage());
return mapping.findForward("error");
它已经完成,因为
ActionForm
或 ValidatorForm
的验证方法不会引发任何异常,并且我无法在不引发异常的情况下正确重写此方法。一旦扔了,谁会在乎?!