一尘不染

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

jsp

首先,我使用简单的主题,但即使没有主题,也会发生相同的行为(页面格式除外)。当我提交表单时,名称字段变空并重定向到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>

register.jsp

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

随时要求我澄清。我对Struts 2相当陌生,我尝试了Struts
2文档验证方法,并检查了其他教程。我不知道我是否丢失了某些东西或者我有没有注意到的错误配置,因为逻辑在起作用,而视图部分(jsp)却不在。提前致谢。


阅读 300

收藏
2020-06-10

共1个答案

一尘不染

在阅读了INPUT结果的工作原理并放弃了ModelDriven设计模式之后,该模式没有给您的编程经验增加任何东西,除了问题,这些问题很容易隐藏在InterceptorStack的中间],请注意:

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

为了防止这种情况,如果您想继续使用PRG模式(并因此使用重定向),则可以使用MessageStore拦截器,该存储将在重定向过程中为您存储和检索消息。只需定义一个包含它的拦截器堆栈即可解决您的问题。

或像文档中的示例一样执行一次。

2020-06-10