【问题标题】:struts2 conversation and validationstruts2 对话和验证
【发布时间】:2012-09-08 21:50:58
【问题描述】:

我正在开发一个具有相互依赖形式的 struts2 项目。 我找到了 struts2-conversation,浏览了他们的simple-example 并且理解了目前的对话机制(如果我有错误请纠正我):

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 老问题,但我在任何罐子里都找不到 FieldVisitorValidator?!
    • @AlirezaFattahi 我很抱歉,这似乎是一个错字。我应该使用复制/粘贴!它应该说@VisitorFieldValidator。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多