あなたにとっては、拡張され、目的の形式がによって返されるバッキングコンポーネントを使用して、このための複合コンポーネントを作成するのがおそらく最も簡単です。UIInput
UIInput#getSubmittedValue()
最も単純な形式のキックオフの例を次に示します。
/resources/components/refNo.xhtml
<ui:component
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:p="http://primefaces.org/ui"
>
<cc:interface componentType="refNoComposite" />
<cc:implementation>
AT-#{cc.year}-<p:inputMask id="ref1" required="true" mask="9999"/>-<p:inputMask id="ref2" mask="aa"/>
</cc:implementation>
</ui:component>
com.example.RefNoComposite
@FacesComponent("refNoComposite")
public class RefNoComposite extends UIInput implements NamingContainer {
public RefNoComposite() {
getStateHelper().put("year", new SimpleDateFormat("yyyy").format(new Date()));
}
@Override
public String getFamily() {
return UINamingContainer.COMPONENT_FAMILY;
}
@Override
public Object getSubmittedValue() {
return new StringBuilder()
.append("AT")
.append('-')
.append(getYear())
.append('-')
.append(((UIInput) findComponent("ref1")).getSubmittedValue())
.append('-')
.append(((UIInput) findComponent("ref2")).getSubmittedValue())
.toString();
}
public String getYear() {
return (String) getStateHelper().eval("year");
}
}
ランダムなFaceletsページでの使用例:
xmlns:cc="http://java.sun.com/jsf/composite/components"
...
<h:form>
<cc:refNo value="#{bean.value}" />
<p:commandButton value="submit" action="#{bean.submit}" />
</h:form>
注:値も検証する場合UIInput#validateValue()
は、バッキングコンポーネントのメソッドをオーバーライドする必要があります。ちなみに、2番目の引数は正確にgetSubmittedValue()
です。