从参数化方法获取输入值

时间:2013-09-30 17:00:53

标签: jsf jsf-2 richfaces el

我正在尝试使用参数化方法中的值填充输入,因为我无法使用getter直接访问此值。

<c:forEach items="#{operationBean.tableFields}" var="tableField" varStatus="status">
    <rich:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:outputText value="#{operationBean.findLabel(tableField)}"/>
                <h:inputText value="#{operationBean.filters[tableField]}" layout="block">
                    <a4j:ajax event="keyup" render="table" execute="@table"/>
                </h:inputText>
            </h:panelGroup>
        </f:facet>
        <c:choose>
            <c:when test="#{operationBean.editableColumn(tableField)}">
                <rich:inplaceInput value="#{operationBean.findOperationFieldValue(operation, tableField)}"
                        valueChangeListener="#{operationBean.changeOperationFieldValue}"
                        saveOnBlur="false">
                    <f:attribute name="tableField" value="#{tableField}"/>
                    <f:attribute name="operation" value="#{operation}"/>
                    <a4j:ajax execute="@this"/>
                </rich:inplaceInput>
            </c:when>
            <c:otherwise>
                <h:outputText value="#{operationBean.findOperationFieldValue(operation, tableField)}"/>
            </c:otherwise>
        </c:choose>
    </rich:column>
</c:forEach>

显然,JSF试图为rich:inplaceInput调用一个setter,找不到它,然后抛出 javax.el.PropertyNotWritableException: /faces/operations/table.xhtml @29,56 value="#{operationBean.findOperationFieldValue(operation, tableField)}": Illegal Syntax for Set Operation

我不需要尝试调用setter,因为valueChangeListener可以满足我的需要。

我可以创建自己的组件并覆盖UIInput.updateModel(),但这会很痛苦。

0 个答案:

没有答案