私が開発しているアプリの要件では、検索を実行するときに、ユーザーは州を入力せずに都市を検索できないようにする必要があります。逆に、都市を入力せずに州を検索することはできません。
search.xhtml
<h:inputText id="city" binding="#{city}" value="#{search.city}" validator="#{search.validateCity}">
<f:attribute name="state" value="#{state}"/>
</h:inputText>
<h:inputText id="state" binding="#{state}" value="#{search.state}" validator="#{search.validateState}">
<f:attribute name="city" value="#{city}"/>
</h:inputText>
Search.java
public void validateCity(FacesContext context, UIComponent component, Object convertedValue) {
UIInput stateComponent = (UIInput) component.getAttributes().get("state");
String state = (String) stateComponent.getValue();
if(convertedValue.toString().length() > 0) {
if(state.length() < 1) {
throw new ValidatorException(new FacesMessage("Please enter State."));
}
}
}
public void validateState(FacesContext context, UIComponent component, Object convertedValue) {
UIInput cityComponent = (UIInput) component.getAttributes().get("city");
String city = (String) cityComponent.getValue();
if(convertedValue.toString().length() > 0) {
if(city.length() < 1) {
throw new ValidatorException(new FacesMessage("Please enter City."));
}
}
}
コードを簡略化して、標準のクロスフィールド検証方法で何を試みたかを示しました。しかし、私が直面している問題は、検証フェーズで、市と州の両方が検証エラーを示していることです。2つのバリデーターがお互いに邪魔をして、失敗のループを作成しているためだと思います。
これを回避するために使用できる回避策はありますか?
ありがとう。