基于模型的JSF自动文本字段大小

时间:2012-12-08 06:22:03

标签: jsf jsf-2 mojarra

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的等同物?

谢谢,
czetsuya

2 个答案:

答案 0 :(得分:2)

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

@ManagedBean
@ApplicationScoped
public class MyBean {

    public int getType1MaxLength() {
        return 50;
    }
}

和xhtml:

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

答案 1 :(得分:1)

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

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

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

       field.maxlength = 50
    
  2. faces_config.xml文件中配置资源包软件包,其中<var>指定要在应用程序中访问资源文件的变量名称

       <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}"/>