Java struts2对话和验证

Java struts2对话和验证,java,struts2,validation,bean-validation,conversation-scope,Java,Struts2,Validation,Bean Validation,Conversation Scope,我正在从事一个struts2项目,该项目具有相互依赖的形式。 我找到了struts2对话,跨过了他们的 并且理解到目前为止的对话机制(如果我有什么错误,请纠正我): 控制器映射到struts.xml中 它保存可序列化的ConversationContext和存储服务 ConversationContext保存通过命名约定映射到表单上的POJO 现在我的问题是把验证放在哪里 在这种结构中,控制器只是一个扩展ConversationSupport的控制器,因此ActionSupport提供了va

我正在从事一个struts2项目,该项目具有相互依赖的形式。 我找到了struts2对话,跨过了他们的 并且理解到目前为止的对话机制(如果我有什么错误,请纠正我):

  • 控制器映射到struts.xml中
  • 它保存可序列化的ConversationContext和存储服务
  • ConversationContext保存通过命名约定映射到表单上的POJO
现在我的问题是把验证放在哪里

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

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


马克的对话拦截器方法出现了,这是我没有真正得到的解决办法。也许你可以在这方面帮助我。

如果你想在模型类上使用注释,它可以与插件配合使用(其他验证方法也是如此)

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

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

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


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

老问题,但我在任何JAR中都找不到FieldVisitorValidator@AlirezaFattahi我很抱歉,这似乎是一个打字错误。我应该用复制/粘贴!它应该是
@VisitorFieldValidator
。谢谢