struts2对话和验证

时间:2012-09-16 11:15:01

标签: java struts2 validation bean-validation conversation-scope

我正在开发一个具有相互依赖形式的struts2项目。 我找到了struts2对话,逐步完成了simple-example 并了解到目前为止的谈话机制(如果我出错了,请纠正我):

  • Controller在struts.xml
  • 中映射
  • 它包含可序列化的ConversationContext和Storing-Service
  • ConversationContext通过命名约定
  • 保存在表单上映射的POJO

现在我的问题是在哪里进行验证?

在这种结构中,控制器只有一个扩展ConversationSupport,从而ActionSupport提供validate,prepare和addField-& ActionError方法。 但是在控制器内进行验证意味着验证整个上下文,这并不能真正解决问题。

我尝试通过POJO中的注释进行验证,如上所述在上下文中给出了一些NullPointerException,好像上下文没有被刷新,我认为struts2的xml验证方法太过僵硬。 (顺便说一下如何让生成的javascripts在被服务之前缩小?为什么有这么多选项呢?)

Mark的会话 - 拦截器方法已经出现similar problems,这是我没有真正得到的解决方法。也许你可以帮助我。

1 个答案:

答案 0 :(得分:1)

如果您想在模型类上使用注释,它可以与插件一起使用(与其他验证方法一样)。

要验证您的模型,请将@VisitorFieldValidator添加到控制器中的getModel()方法。在示例应用中,您还可以将@VisitorFieldValidator添加到getContact()getPreferences()方法中。然后,您可以在要验证的字段上使用validation annotations

示例中的服务就是在Struts2控制器中使用注入服务的一个简单示例,以及它如何与对话框架轻松集成,但它没有直接关联或需要(我建议使用在现实世界中依赖注入的Spring,Guice或CDI。)

ConversationContext类主要供框架内部使用。您应该能够通过使用注释和约定避免与它进行交互。除非你只是想冒险。

要在示例应用程序中使用XML验证,您必须更改程序包名称以删除“struts2”单词,以便Struts2资源加载工具加载XML。