同時に 2 つの入力の検証に問題があります。
私のバリデーターでは、両方からのデータが必要です:
<h:selectOneListbox>
<h:inputText>
アイデアは、配達担当者が住所に到達できるかどうかを確認することです。検証中にDBにリクエストを行います。そして、streetName + houseNumber の組み合わせを探します。
これは私の JSF ページの一部です。
<h:form>
<p>
<h:outputLabel for="streetsList" value="Street"/>
<h:selectOneListbox id="streetsList" binding="#{theStreetsList}"
size="1" value="#{makeOrder.streetName}" required="true">
<f:selectItems value="#{locationView.streetNames}" var="streetName"
itemLabel="#{streetName}" itemValue="#{streetName}"/>
</h:selectOneListbox>
</p>
<p class="address_details">
<h:outputLabel for="houseInput" value="#{msgs.house}"/>
<h:inputText id="houseInput" class="tab_input house_input"
value="#{makeOrder.house}" required="true">
<f:validator validatorId="AddressValidator" />
<f:attribute name="street" value="#{theStreetsList}" />
<f:ajax event="blur" execute="streetsList houseInput" render="m_houseInput" />
</h:inputText>
<h:message id="m_houseInput" for="houseInput" style="color:red" />
<h:outputLabel for="flatInput" class="flat_label" value="#{msgs.flat}"/>
<h:inputText class="tab_input flat_input" value="#{makeOrder.flat}"/>
</p>
</h:form>
これが私のクラスのvalidateメソッドです:
@Override
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException {
String house = (String) value;
UIInput streetsComponent = (UIInput) component.getAttributes().get("street");
String streetName = (String) streetsComponent.getSubmittedValue();
Street orderStreet = this.findStreetInDB(streetName, house);
if (orderStreet.getName().equals("dummyStreet")) {
// Show error
FacesMessage msg = new FacesMessage(
"Unfortunately we do not deliver to this address, yet.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
私の問題はそれString streetName
ですnull
。
PSこの要素の値は適切にレンダリングされます。また、検証を使用しない場合でも、フォームを送信できます。
- 私は何を間違っていますか?
- これを行う正しい方法は何ですか?
ありがとう!