h:inputText在验证时没有reRender标签

时间:2010-10-13 12:56:44

标签: validation jsf internationalization ajax4jsf

当我尝试在验证时调用h:inputText标签字段值时,我遇到了一个特殊的问题。它仅在我将静态值传递给标签字段时才有效。我将动态值传递给它的时间,当该字段的某些验证失败时,它无法呈现标签。

<h:inputText id="fullNameField" value="#{newUserFormBean.fullName}"
       **label="${nlsSupport.label_fullName}"** required="true" size="32"  styleClass="required">                        
               <f:validateLength minimum="3" maximum="64"/>
</h:inputText>

如果验证失败为最小长度,则错误消息显示为:

此处未呈现标签:必须至少包含3个字符

但是,当我对标签进行硬编码而不是向其传递动态值时,它会显示一条有效的验证消息,并在屏幕上显示标签名称。

<h:inputText id="fullNameField" value="#{newUserFormBean.fullName}"
      **label="Full Name"** required="true" size="32" styleClass="required">      
      <f:validateLength minimum="3" maximum="64"/>
     </h:inputText>

现在,如果验证失败为最小长度,则错误消息显示为:

全名:必须至少包含3个字符

我还查看了JSF文档,它读取标签接受表达式语言表达式。那么为什么在失败验证后传递的动态值不会被渲染?

另外,我需要动态传递标签(来自资源包),以便为不同的语言添加国家语言功能。这就是迫使我将动态值传递给label属性而不是静态字段的原因。

感谢。

1 个答案:

答案 0 :(得分:1)

得到了解决方案。

我正在使用

在xhtml中加载资源包

<f:loadBundle basename="com.myproject.i18n.nls" var="nlsSupport" />

这将导致在Ajax验证上加载资源包字段时出现问题。现在我将其修改为实现Ajax支持

<a4j:loadBundle basename="com.myproject.i18n.nls" var="nlsSupport" />

现在可以使用了。