Jboss 持久化JSF2复合组件值

Jboss 持久化JSF2复合组件值,jboss,jsf-2,composite-component,Jboss,Jsf 2,Composite Component,我有一个datatable,它循环遍历一个列表,并有一个值列,该列呈现如下内容: <h:dataTable var="assessmentFieldValue" value="#{assessmentBean.assessmentFieldValues}"> ... <ui:fragment rendered="#{assessmentFieldValue.field.type eq 'TEXT'}"> <h:inputText va

我有一个datatable,它循环遍历一个列表,并有一个值列,该列呈现如下内容:

<h:dataTable var="assessmentFieldValue" value="#{assessmentBean.assessmentFieldValues}">
    ...
    <ui:fragment rendered="#{assessmentFieldValue.field.type eq 'TEXT'}">
        <h:inputText value="#{assessmentFieldValue.value}" />
    </ui:fragment>
    <ui:fragment rendered="#{assessmentFieldValue.field.type eq 'SLIDER'}">
        <component:slider value="#{assessmentFieldValue.value}" />
    </ui:fragment>
    ...
</h:dataTable>

...
...
所以有时候我会得到一个标准的inputText,有时候我会得到我的复合滑块组件:

<composite:interface>
    <composite:attribute name="value" />
</composite:interface>

<composite:implementation>
    <script type="text/ecmascript">
        function updateValue(value) {
            $('##{cc.id} span').each(function() {
                $(this).text(value);
            });
        }
    </script>

    <div id="#{cc.id}">
        <input id="sliderComponent" type="range" min="1" max="10"
                value="#{cc.attrs.value}"
                style="float: left"
                onchange="javascript:updateValue(this.value);" />

        <h:outputText id="fieldValue" value="#{cc.attrs.value}"
                style="min-width: 20px; display: block; float: left" />
    </div>
</composite:implementation>

函数updateValue(值){
$('#{cc.id}span')。每个(函数(){
$(此).text(值);
});
}
这一切都按照我的意愿呈现(部署在JBoss-AS7上),但当我点击与datatable关联的save按钮时,assessmentBean.assessmentFieldValue列表不会反映滑块组件上的任何值更改,但它会反映标准inputText


有人能提出为什么对滑块的更改不能返回到支持bean吗?谢谢

这是因为您使用了一个普通的HTML
元素,而不是像
这样的完整JSF输入组件。这样,值就不会绑定到JSF上下文。它只被当作普通模板的输出值,而不是输入值。复合组件不能解决这个问题。您确实需要为此创建一个完整的
UIComponent
(或者寻找一个第三方组件库,它已经为您完成了令人讨厌的工作,比如PrimeFaces和its)

另见:

这是因为您使用了一个普通的HTML
元素,而不是像
这样的完整JSF输入组件。这样,值就不会绑定到JSF上下文。它只被当作普通模板的输出值,而不是输入值。复合组件不能解决这个问题。您确实需要为此创建一个完整的
UIComponent
(或者寻找一个第三方组件库,它已经为您完成了令人讨厌的工作,比如PrimeFaces和its)

另见: