2012-08-09 95 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()