【问题标题】:Persisting JSF2 Composite Component value持久化 JSF2 复合组件值
【发布时间】:2011-11-10 13:57:49
【问题描述】:

我有一个遍历 List 的数据表,并且有一个这样呈现的值列:

<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>

这一切都按照我的意愿呈现(部署在 JBoss-AS7 上),但是当我点击与数据表关联的保存按钮时,assessmentBean.assessmentFieldValue 列表并没有反映滑块组件上的任何值更改它 确实为标准输入文本。

任何人都可以提出为什么对滑块的更改不会使其回到支持 bean 吗?谢谢!

【问题讨论】:

    标签: jboss jsf-2 composite-component


    【解决方案1】:

    这是因为您使用了纯 HTML &lt;input&gt; 元素,而不是像 &lt;h:inputText&gt; 这样的完整 JSF 输入组件。这样,值就不会绑定到 JSF 上下文。它仅被视为普通模板输出值,而不是输入值。复合组件不会解决这个问题。你真的需要为此创建一个完整的UIComponent(或者寻找已经为你完成了令人讨厌的工作的第3方组件库,例如带有&lt;p:slider&gt;的PrimeFaces)。

    另见:

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2012-03-10
      • 2011-11-27
      • 2020-12-05
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多