java - Struts2 验证无法正常工作,未显示验证错误消息

标签 java validation jsp struts2 interceptorstack

首先,我使用简单的主题,但即使没有它,也会发生相同的行为(页面格式除外)。当我提交表单时,名称字段变空并重定向到 register.jsp 而不显示验证错误。检查日志或使用调试器后,验证似乎正常工作并且服务器日志消息按预期写入。我将发布通用代码。

struts.properties

struts.ui.theme=simple

我的行动

private User user = new User()    // getter and setter

@Inject
transient UserDAO userDAO;

@Override
public User getModel() {
    return user;
}

public void validate(){

    LOG.debug("NAME VALIDATION " + user.getName());
    if("".equals(user.getName())){
        addFieldError("user.name", "Name can't be empty");
        LOG.debug("Validation Error on name");
    }       
}

使用调试器检查,验证方法正常工作并写入日志。

struts.xml

<package name="users" extends="struts-default">
    <action name="registerUser" method="prepareRegister" class="com.test.MyAction">
        <result name="success">/register.jsp</result>
    </action>

    <action name="saveOrUpdateUser" method="saveOrUpdate" class="com.test.MyAction">
        <result name="input" type="redirect">registerUser</result>
        <result name="success" type="redirect">listUser</result>
    </action>
</package>

注册.jsp

<td>
    <s:textfield id = "userName" 
              label = "User Name" 
               name = "user.name" />
</td>
<s:fielderror fieldName = "user.name" />

请随时向我寻求澄清。我对 struts 2 还很陌生,我尝试了 struts 2 文档验证方式,也检查了其他教程。我不知道我是否遗漏了某些东西,或者我有一些我没有注意到的错误配置,因为逻辑正在工作,而 View 部分(jsp)却没有。提前致谢。

最佳答案

读完 how the INPUT result works 后并且放弃了 ModelDriven 设计模式,除了问题之外,它不会给您的编程体验带来任何增加,这可能很容易hide themselves in the middle of the Interceptor Stack ,请注意:

  • redirect 是重定向到外部 URL 或非 Action URL 时使用的结果,而 redirectAction 应该在重定向到 Action 时使用;
  • 重定向时,会创建一个新请求,因此旧参数(包括操作错误、消息和字段错误)会丢失。

为了防止这种情况,如果您想继续使用 PRG 模式(以及重定向),您可以使用 MessageStore Interceptor它将通过重定向存储和检索消息;只需定义一个包含它的拦截器堆栈,它就会解决您的问题。

或者像 in the example from the documentation 那样执行一次.

关于java - Struts2 验证无法正常工作,未显示验证错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36598872/

相关文章:

javascript - 正则表达式法国电话号码

java - JFace 数据绑定(bind) MultiValidator 不重新评估

java - 需要通过网页获取路径位置

java - JSF h :commandlink not working after updating version

java - 如何在Liferay站点的每个页面上放置公司地址和电话?

java - 如何使用 LDAP 限制登录尝试

java - 如何在 lwuit (J2ME) 中显示多行文本区域?

java - Collectors.groupingBy() 中的映射值

javascript - 暂时禁用 AngularJS 中的表单验证

java - 在文本区域中打开特定文本文档