1

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

4

2 回答 2

2

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

@ManagedBean
@ApplicationScoped
public class MyBean {

    public int getType1MaxLength() {
        return 50;
    }
}

和xhtml:

<p:inputText ... maxlength="#{myBean.type1MaxLength}" value="#{user.firstName}">
于 2012-12-08T08:14:53.343 回答
1

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

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

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

       field.maxlength = 50
    
  2. 在您的文件中配置 1) 中的资源包包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}"/>
    
于 2012-12-09T18:36:34.980 回答