2012-08-09 37 views
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。我如何追加所有值並將其設置爲單個模型屬性?

回答

1

對於你它很可能是最容易爲此創建composite component與延伸UIInput並且其中,所述所需格式由UIInput#getSubmittedValue()返回背襯組件。

下面是最簡單的形式開球例如:在一個隨機的Facelets頁面

/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"); 
    } 

} 

用例:

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()方法。第二個參數正好是getSubmittedValue()