我尝试在支持 bean 中创建一个 InputField 并将其添加到视图中,但数据绑定似乎只是只读的。
我在 Backing-Bean 中创建了一个 UIInput,如下所示:
UIComponent textInput = new UIInput();
textInput.setId("operandInputText");
textInput.setValueExpression("value", ef.createValueExpression(elCtx, "#{row.operandValues[0]}", String.class));
textInput.setValueExpression("rendered", ef.createValueExpression(elCtx, "#{row.inputType == 'text'}", Boolean.class));
mInputPanelGroup.getChildren().add(textInput);
panelGroup 位于 dataTable 的列内并绑定到 bean:
<p:column id="operandColumn">
<h:panelGroup id="inputPanelGroup" binding="#{locateEmployeeBean.inputPanelGroup}" >
<h:inputText id="testInput" value="#{row.operandValues[0]}" />
</h:panelGroup>
</p:column>
PanelGroup内部<h:inputText/>
仅用于测试,在这里我发现我所做的绑定setValueExpression(...)
至少是只读的。
在浏览器中,我现在有 2 个输入字段,首先是“testInput”,然后是“operandInputText”。当我在“operandInputText”中输入一个值并提交时,该值不会被保存,但是当我在“testInput”-Field 中输入一个值时,它会被提交,此外该值会显示在两个 inputFields 中。
操作数值是一个简单的对象数组:
private Object[] mOperandValues = new Object[2];
这可能与我传递给的数据类型有关setValueExpression(...)
吗?我尝试了 Object,但这并没有改变任何东西。
知道为什么会这样吗?提前致谢!