我的应用程序中有一个login.jsp
页面。我使用Struts 2和一个简单的validate()
方法来验证我的表单。我有两个问题:
1.我的表单bean类中的validate()
方法验证表单。即检查空字段等。如果我需要检查我的用户名和密码组合,我应该在validate()
中还是在我的action类中这样做?
1.如果我在我的Action
类中做同样的事情,正确的组合会导致成功页面。我希望错误的组合会导致我的JSP页面沿着错误消息:“Incorrect combination”。我如何在JSP页面中检查请求来自action类,以便它可以打印错误消息“Incorrect combination”?
3条答案
按热度按时间ahy6op9u1#
认证属于行动,而不是验证,IMO。
我可能会考虑对字段本身使用XML或注解验证,并将登录尝试放在
validate()
中,但代码很小,我对这两种方式都很满意。字符串
我会使用框架对操作级错误消息的支持,而不是使用一个标志(如果我这样做了,我不会用一个本地标志来 * 复制 * 那个标志),我强烈建议使用一些你可以注入的东西来做实际的登录,以使测试更容易。
使用
validate()
方法会使事情变得非常紧凑:型
假设您定义了合理的“输入”和“成功”结果,这可能是您所需要的全部。如果查看代码的开发人员熟悉框架,则
validate()
版本相对清晰。如果你对使用XML或注解验证不感兴趣,你也可以手动完成。这 * 绝对 * 属于
validate()
,对于像这样的常见实用程序方法,静态导入使代码仍然相对简洁:型
(我添加了
tryLogin
标志,以避免看到登录明显失败的错误消息,尽管这也可以用其他方式处理。登录后处理省略了。)3ks5zfa02#
我会说你肯定不希望在validate方法中使用登录逻辑;那是为了验证数据。
我建议,如果你的登录失败,只需在action上公开一个data属性,比如:
字符串
然后在login.jsp中,只需在struts if标记中 Package 一条关于错误凭证的消息,并对loginValid属性进行测试。
332nm8kg3#
验证框架的目的是检查字段值是否有效,以防止在执行操作时出现意外错误。
将验证逻辑与业务逻辑分离是一个很好的做法。身份验证与验证逻辑无关。它是安全机制提供的一个单独的过程。当然,您可以创建执行身份验证的操作或拦截器,并且与任何操作一样,您可以将其配置为验证。
在Struts2中,通过应用
validation
interceptor作为处理请求的一部分,它甚至更加简化。在更复杂的场景中,身份验证成为业务逻辑的一部分,但验证输入字段的方法重命名相同。如果您的操作只是进行身份验证,那么您可能不需要验证来处理身份验证。对于你的第二个问题:你所需要的就是
addActionError(getText("error.key"))
来使操作无效。然后返回到结果,其中<s:actionerror>
显示消息。更重要的是,如果您决定将其移动到action,验证逻辑保持不变。在这种情况下,您唯一需要做的就是删除验证堆栈。这种 * 验证 * 的唯一原因是返回与
"input"
不同的结果。