提交的值似乎被忽略了

时间:2014-04-22 16:21:46

标签: jsf-2 primefaces

我有一个selectOneMenu,当它的值改变时,它会被处理 xhtml非常通用,所以不太清楚。这是:

<p:selectOneMenu 
    id="#{myId}"
    value="#{obj[attr]}"
    panelStyle="font-size: 10px;"
    disabled="#{cc.attrs.grid.readonly}"
    style="margin-top: 3px; width:79px;" 
    styleClass="#{change.getChangeClass(cc.attrs.grid)} toUpdate">
    <f:selectItems value="#{cc.attrs.grid.valuesString}" var="elem" itemValue="#{elem}" itemLabel="#{elem}"/>
    <f:validator validatorId="GenericValidator" />
    <p:ajax 
      process="@this" 
      listener="#{rules.process()}" 
      update="@this"/>

以下是生成的html的一部分,它更清晰:

    behaviors:{change:function(event){
      PrimeFaces.ab({
        source:'masterCenter:fuel3Content:j_idt621:fuel_codeCat',
        event:'valueChange',
        process:'masterCenter:fuel3Content:j_idt621:fuel_codeCat',
        update:'masterCenter:fuel3Content:j_idt621:fuel_codeCat'}, arguments[1]);}
    }

当我选择一个值时,它会被发布(我可以使用chrome工具看到它在发布的表单数据中)。 但我没有调用我的验证方法(GenericValidator.validate()) 当我提交整个表单时,会调用验证方法,但它表示组合的值为null 我觉得在申请请求值阶段期间没有设置此值。

但这种行为取决于具体情况:
这个selectOneMenu在一个面板中。我第一次打开这个面板(加载ajax),它工作正常。我可以更改selectOneMenu的值,并使用我选择的值调用我的验证方法 现在,当我再次打开此面板时,selectOneMenu不再起作用。但是生成的html完全相同。
对于这种形式的p:inputTextarea,我也有相同的行为。

我在Mojarra 2.1.10中使用了primefaces 3.4.1。它看起来像一个primefaces / mojarra bug,但我没有找到这个问题的注释。

2 个答案:

答案 0 :(得分:0)

在值表达式value="#{obj[attr]}"中,为什么要使用地图?你如何设置attr值?你能提供更多细节吗?

答案 1 :(得分:0)

在jsf 2.0之前的版本中,对于空字段和空字段,将忽略validaton。在jsf 2.0中,如果您的jsf在支持bean验证的环境中运行,那么默认情况下会验证您的空字段或空字段。

如果您使用不支持bean验证的非j2ee 6兼容服务器(如tomcat 6或jetty),则无法对空字段或空字段进行验证。

如果要对空字段强制执行验证,可以使用required="true"

  <context-param>  
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>  
    <param-value>true</param-value>  
  </context-param>  

希望这会有所帮助。如果您需要进一步的帮助,请发表评论