我有一个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,但我没有找到这个问题的注释。
答案 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>
希望这会有所帮助。如果您需要进一步的帮助,请发表评论