【问题标题】:Bean validation VS JSF validationBean 验证 VS JSF 验证
【发布时间】:2011-01-29 10:13:06
【问题描述】:

当面临在 JSF2 应用程序中验证属性的问题时,有两种主要方法。

使用 Annotation 在 ManagedBean 上定义验证

@ManagedBean
public class MyBean {
    @Size(max=8)
    private String s;

    // Getters setters and other stuff.
}

或者在jsf页面声明:

<h:inputText value="#{myBean.s}">
    <f:validateLength maximum="8"/>
</h:inputText>

碰巧我无法为他们中的任何一个做出决定。第一个很好,因为它从 jsf 页面中删除了一些代码(这总是很好,因为这些页面在定义上并不友好),但是在检查 jsf 文件时更难“一目了然”看到页面发生了什么.

你觉得哪一个更清楚?更好?更好?

【问题讨论】:

    标签: jsf jakarta-ee


    【解决方案1】:

    我会在 ManagedBean 上进行验证,这会从模型视图控制器中的 VIEW 的 JSF 中删除逻辑。并且应该让 JSF 对展示模型负责。 在托管 bean 上也有这个可以确保在任何地方都应用更新验证。这更干燥(不要重复自己)。

    【讨论】:

    • 在大多数情况下,您仍然必须在 gui 中重复,例如将 maxlength 或 size 或任何其他签证值限制为与验证中使用的值相同的值。
    • @David Waters,bean 验证和 jsf 验证是否都发生在相同的生命周期或不同的生命周期中,我的意思是 jsf 验证发生在 bean 验证之前? jsf验证是否发生在客户端?
    • @MahmoudSaleh - 嗨,Mahmoud,我可以建议将您的问题作为问题而不是评论来提问,您会得到更好的反应和更广泛的人的回答。
    【解决方案2】:

    managedBean 方法还有另一个优点。如果 JSF 显示的信息也可以通过 Web 服务 (WS) 获得,那么可以将实际验证代码分解为验证类并用于 JSF 和 WS,以确保系统中的所有信息都是有效的。

    【讨论】:

      【解决方案3】:

      Richfaces 允许您一起使用它们。请参阅&lt;rich:graphValidator&gt;(以及beanValidator)。

      这些标签说:“基于javax.validation(或Hibernate验证器)规则应用JSF验证”。

      【讨论】:

      • bean 验证和 jsf 验证是否都发生在相同的生命周期或不同的生命周期中,我的意思是 jsf 验证发生在 bean 验证之前? jsf验证是否发生在客户端?
      【解决方案4】:

      @user1730904,您可以在资源包文件中定义消息,如 Bean 验证规范文档中所述。所需步骤很简单:

      1. 在某个类路径文件夹中创建一个名为ValidationMessages_xx_XX.properties 的文件(例如src/main/resources/)。其中xx_XXes_ESen_US 等。内容可能是: field.message=The number of digits must be less or equal than {max}.
      2. 然后使用bean属性注释中的值: @Size(max = 20, message="{field.message}")

      【讨论】:

        【解决方案5】:

        我可能更喜欢 JSF 验证,因为我无法提供资源包错误消息作为 bean 验证的一部分。例如你不能这样做

        @NotNull(message = ResourceBundleHelper.getString("error_message"))
        

        因为“编译常量只能是原语和字符串”。有一些解决方法可以定义常量消息,但这看起来很难看。

        【讨论】:

        • 您可以使用 omnifaces 和 deltaspike 的自定义捆绑解析器
        猜你喜欢
        • 2015-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 2015-11-30
        • 1970-01-01
        相关资源
        最近更新 更多