0

我正在尝试用参数化方法中的值填充我的输入,因为我无法使用 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 尝试为 调用 setter,rich:inplaceInput但找不到它,然后抛出 javax.el.PropertyNotWritableException: /faces/operations/table.xhtml @29,56 value="#{operationBean.findOperationFieldValue(operation, tableField)}": Illegal Syntax for Set Operation

我不需要这个尝试调用 setter,因为valueChangeListener我需要它。

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

4

0 回答 0