我Primefaces 4.0 / JSF 2.1
Tomcat 6
的行为很奇怪
我有一个非常复杂的输入表单,在字段上有各种验证。如果用户提交表单并且验证失败,则页面的某些部分将无响应。
奇怪的是,某些部分仍然完全正常运行,而其他部分(在同一个组件中,访问相同的bean值)则被破坏。
以下是一个例子:
支持bean:
public class Config{
private boolean enabled;
private String deu;
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String getCra_deu() {
return cra_deu;
}
public void setCra_deu(String cra_deu) {
this.cra_deu = cra_deu;
}
}
public class Contact {
@NotNull
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
现在我有一个JSF页面,其面板配置如下:
<p:panel id="pspanel" style="width:80%;" styleClass="#{bean.config.enabled?'activePanel':''} EditPanel" toggleable="true" collapsed="#{!bean.config.enabled}" widgetVar="pspanelVar" >
<f:facet name="header">
<p:selectBooleanCheckbox id="ps_enabled" style="margin-right:20px;" value="#{bean.config.enabled}" >
<f:ajax render="pspanel" onevent="reapplyDefaults" />
</p:selectBooleanCheckbox>
<p:outputLabel value="PS"/>
</f:facet>
<p:panelGrid columns="2" style="width:100%;" columnClasses="input-col1,input-col2">
<p:outputLabel value="DEU:"/>
<p:selectOneMenu id="ps_deu" value="#{bean.config.deu}" style="width:20em" styleClass="DefaultEnabled">
<f:selectItem itemLabel="none" itemValue=""/>
<f:ajax listener="#{controller.changed}" immediate="true" onevent="reapplyDefaults"/>
</p:selectOneMenu>
</p:panelGrid>
</p:panel>
通常应该发生什么:如果用户点击面板标题中的复选框,则支持bean enabled-Value
将设置为true,面板将被重新呈现,这将获得样式类activePanel
,它将被展开(collapsed=false
)。这通常有效。
验证失败后会发生什么:验证失败后,当用户点击复选框时,正确设置了支持bean enabled-Value
,面板获得了style-class
,但它不再扩张/崩溃。这真的很奇怪,因为style-class
和collapsed-attribute
在支持bean(config.enabled
)中使用相同的值。
我非常感谢有关如何解决这个问题或为什么会发生这种情况的任何想法或建议。谢谢!