1

2つのoutputTextフィールド、1つの必須フィールドと1つのオプションフィールドがあります。すべての値を連結または追加して、単一のモデルプロパティとして設定するにはどうすればよいですか?

<h:outputText value="AT-" />
<h:outputText value="#{yearOfDate}"/>
<p:inputMask value="#{requiredRefNo}" required="true" mask="9999"/>
<p:inputMask value="#{optionalRefNo}" mask="aa"/>

与えられた例では、例えば文字列AT-2012-6060-VIがあります。すべての値を追加して、単一のモデルプロパティとして設定するにはどうすればよいですか?

4

1 に答える 1

1

あなたにとっては、拡張され、目的の形式がによって返されるバッキングコンポーネントを使用して、このための複合コンポーネントを作成するのがおそらく最も簡単です。UIInputUIInput#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()です。

于 2012-08-09T19:21:33.260 に答える