我正在尝试使用参数化方法中的值填充输入,因为我无法使用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(),但这会很痛苦。