プロパティとして列挙型と文字列を持つ単純なリクエストスコープのエンティティ/pojoがあります。
public Enum Type
{
None,
Email,
Fax;
}
@ManagedBean(name = "testEntity")
@RequestScoped
public class TestEntity
{
private Type type; //Default = None
private String address;
//getter and setter
}
この列挙型には、電子メールアドレスと関連アドレスを識別するフィールド「Email」があります。
JSFで、SelectOneMenuで現在選択されているタイプに関するアドレスInputTextフィールドのバリデーターを有効/無効にします。
<h:form id="formId">
<p:selectOneMenu id="type" value="#{testEntity.type}>
<p:ajax event="change" update=":formId:address"/>
<f:selectItem itemLabel="E-mail" itemValue="Email"/>
<f:selectItem itemLabel="Fax" itemValue="Fax"/>
</p:selectOneMenu>
<p:inputText id="address" value="#{testEntity.address}">
<f:validator validatorId="emailValidator" disabled="#{testEntity.type != 'Email'}"/>
</p:inputText>
<!-- button to call bean method with testEntity as param -->
</h:form>
バリデーターがアクティブになることはありませんが、他のフィールドで値の変更を確認できるため、ajax呼び出しは機能しています。