【问题标题】:JSF automatic textfield size base on model基于模型的 JSF 自动文本字段大小
【发布时间】:2012-11-26 08:09:37
【问题描述】:

Mojarra JSF 有没有办法根据支持模型限制文本字段的大小?

例如,通常:

<p:inputText required="true" id="firstname" maxlength="50" value="#{user.firstName}"></p:inputText>

class User {
  @Size(max=50)
  String firstName;
}

虽然我可以为每个字段添加一个 maxlength 属性,但我认为最终我会遇到维护问题,特别是当我有多个使用相同字段的表单时。如果我改变了字段的长度呢?

如果我没记错的话,apache myfaces 在其扩展库的 1 中具有此功能,mojarra 有什么等价物吗?

我记得我现在使用的是 myfaces 的 myfaces-extval-property-validation 库。 http://myfaces.apache.org/extensions/validator12/validation-modules-project/myfaces-extval-property-validation/index.html

有没有来自 mojarra 的等价物?

谢谢,
切苏亚

【问题讨论】:

    标签: jsf jsf-2 mojarra


    【解决方案1】:

    您的要求可以通过在 JSF Resource Bundle 中指定约束来更好地处理,您可以在其中配置所有此类属性,例如错误/验证消息和用户字段约束,例如字段最大长度和转换模式。

    将所有此类信息存储在支持 bean 中的问题在于,这些约束/属性将仅可用于由特定 bean 支持的视图,而不是可用于整个 JSF Webapp 的单个资源包文件。部署最佳实践还将建议您将此类内容放在代码库之外。针对您的特定用例

    1. 在您的项目中创建一个 java 样式的包。假设com.you.jsf.resources。在此包中,您将存储一个包含您的字段设置的 .properties 文件。

         field.maxlength = 50
      
    2. 在您的faces_config.xml 文件中配置1) 中的资源包包,其中&lt;var&gt; 指定您要用来访问应用程序中资源文件的变量名称

         <application>
       <resource-bundle>
      <base-name>com.you.jsf.resources</base-name>
      <var>conf</var>
       </resource-bundle>
         </application>
      
    3. 资源文件(及其内容)现在将在 JSF 上下文中作为#{conf['field.maxlength']} 可用。你现在可以在你的视图中使用它

        <p:inputText required="true" id="firstname" maxlength="#{conf['field.maxlength']}" value="#{user.firstName}"/>
      

    【讨论】:

    • 我对这种方法的担忧与我上面的评论相同,属性文件与实体 bean 大小属性不同步会导致异常。所以这就是为什么我想从实体的字段中获取尺寸定义。
    • @czetsuya,那么显而易见的选择是让您的实体将其字段定义作为其模型的一部分
    • 是的。但是如何使用实体字段中的 size 属性限制 jsf 页面中的文本字段长度?并且可以像我上面提到的 Apache 库那样自动完成吗?
    【解决方案2】:

    你可以有一个定义最大长度的 bean 属性。然后,您至少可以在一处更改此类型的所有文本字段的长度。

    @ManagedBean
    @ApplicationScoped
    public class MyBean {
    
        public int getType1MaxLength() {
            return 50;
        }
    }
    

    和xhtml:

    <p:inputText ... maxlength="#{myBean.type1MaxLength}" value="#{user.firstName}">
    

    【讨论】:

    • 我对这种方法的担忧是托管 bean 将与实体 bean 不同步,因此我想尽可能限制实体上的 size 属性定义。
    猜你喜欢
    • 2013-03-28
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多