Omnifaces skipValidatorsタグをPrimefaces ajaxイベントで使用するのに問題があります。基本的には、selectOneMenuの選択に基づいてフォーム内の多くの要素を更新する必要がありますが、既に入力された値を保持してフォームを検証しないようにする必要もあります。しかし、私はそれを働かせることはできません。ここでは、問題の小さなデモだ:Primefaceを持つすべてのskipValidators ajax
XHTML:
<h:form>
<h:panelGrid columns="3">
<p:outputLabel for="console" value="Basic:" />
<p:selectOneMenu id="console" value="#{testBean.value}" style="width:125px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItem itemLabel="Xbox One" itemValue="Xbox One" />
<f:selectItem itemLabel="PS4" itemValue="PS4" />
<f:selectItem itemLabel="Wii U" itemValue="Wii U" />
<p:ajax event="change" process="@form" update="@form">
<o:skipValidators/>
</p:ajax>
</p:selectOneMenu>
<p:message for="console"/>
<p:outputLabel for="reqField" value="RequiredField:"/>
<p:inputText id="reqField" required="#{testBean.required}" requiredMessage="REQUIRED!"/>
<p:message for="reqField"/>
</h:panelGrid>
</h:form>
testBean:
@Named(value = "testBean")
@SessionScoped
public class TestBean implements Serializable {
private String value;
/**
* Creates a new instance of TestBean
*/
public TestBean() {
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public boolean isRequired() {
return this.value != null && !this.value.isEmpty();
}
}
ページのロードが、それは正しいよう
-reqField
によって何のアスタリスクはありません。いずれかのコンソール値を選択すると、ページが正しく変更され、
reqField
の横にアスタリスクが表示されます。ただし、コンソール値を選択した後、メニューから[Select One]を再度選択すると、検証エラーが表示されます。
私が正しく理解していれば、o:skipValidators
は検証が行われないようにすべきです。何が起きてる?
Iはshowcaseで述べたように、タグはUICommand
又はClientBehaviorHolder
コンポーネントの内部に配置されなければならないomnifaces 2.3とprimefaces 5.1.12