2

我正在研究一个具有相互依赖形式的 struts2 项目。我找到了 struts2-conversation,逐步完成了他们的简单示例 并理解了到目前为止的对话机制(如果我有错误,请纠正我):

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

现在我的问题是在哪里放置验证?

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

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

Mark 的对话拦截器方法也出现了类似的问题,这是我没有真正得到的解决方法。也许你可以在那里帮助我。

4

1 回答 1

1

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

要验证您的模型,请添加@VisitorFieldValidatorgetModel()控制器中的方法。在示例应用程序中,您还将添加@VisitorFieldValidatorgetContact()andgetPreferences()方法。然后,您可以在要验证的字段上使用验证注释

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

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

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

于 2012-09-17T01:08:25.507 回答