【问题标题】:Concating values from multiple output and input components连接来自多个输出和输入组件的值
【发布时间】:2012-08-07 01:25:50
【问题描述】:

我有 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。如何附加所有值并将其设置为单个模型属性?

【问题讨论】:

    标签: string jsf append concat


    【解决方案1】:

    对您而言,使用扩展UIInput 的支持组件为此创建composite component 可能是最简单的,其中所需的格式由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() 方法。顺便说一下,第二个参数正是getSubmittedValue()

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 2013-02-05
      • 2014-07-08
      • 2022-08-21
      • 2023-04-01
      • 2013-12-17
      相关资源
      最近更新 更多