【问题标题】:Automatically set h:inputText maxlength based on Bean Validation @Size根据 Bean Validation @Size 自动设置 h:inputText maxlength
【发布时间】:2015-08-27 08:46:43
【问题描述】:

我在 Web 应用程序中使用 JSF 2 和 Hibernate Validator 5.1。

我在 bean 中使用 @Size@NotNull 之类的注释来自动验证我的 HTML 表单。

它工作得很好,但我想知道是否有一种方法可以根据@Size 注释自动限制输入文本中键入的字符数(即在 HTML 中设置属性 maxlength)。

【问题讨论】:

  • 你必须使用 HibernateValidator 吗? @org.hibernate.validator.constraints.Length(min = 5, max = 25, message = "Error message") 应该去。
  • 感谢您的回答,我尝试了您的解决方案,但@Length 注释的行为相同:可以在我的输入中设置超过 25 个字符(未设置输入 maxlength 属性。 ..) 并显示错误消息。
  • 如果尝试超过 25 个字符并在提交时显示验证错误消息,则认为它有效。
  • 我收集到您想通过maxlength HTML 属性来分隔输入文本中的字符数。使用maxLength(或使用客户端脚本),它总是可以利用的,永远不应该依赖。

标签: jsf bean-validation hibernate-validator


【解决方案1】:

使用maxlength属性

你也可以使用 f:validate -

<h:inputText id="Username" value="#{model.username}" 
                 required="true"
                label="UserName" >
                <f:validateLength minimum="5" maximum="10" />
            </h:inputText>

【讨论】:

    【解决方案2】:

    HTML5 + JSF 2.2+

    如果您使用的是 HTML5 和 JSF 2.2+,请将其指定为 passthrough attribute

    <html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
    
    <h:inputTextarea value="#{bean.text}" a:maxlength="2000" />
    

    【讨论】:

    • plagiarism 的不尊重的 my answer 投了反对票。
    • 感谢您的回答,但我正在寻找一种通过使用休眠验证器 @Size 注释自动指定此属性的方法。
    猜你喜欢
    • 2013-03-25
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2011-01-28
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多