JSF绑定与setValueExpression只读?
问题描述:
我尝试在backing bean中创建一个InputField并将其添加到视图中,但数据绑定似乎只能以只读方式工作。JSF绑定与setValueExpression只读?
我的支持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>
的<h:inputText/>
的panelGroup中内只是为了测试,这是我发现,我所做的与setValueExpression(...)
作品至少是只读的。
在浏览器中,我现在有2个inputFields,首先是'testInput',然后是'operandInputText'。 当我在'operandInputText'中输入一个值并提交时,该值不会被保存,但是当我在'testInput'-Field中输入一个值时,它会被提交,另外值会显示在BOTH inputFields中。
的operandValues是simpe对象数组:
private Object[] mOperandValues = new Object[2];
可这有什么关系我传递给setValueExpression(...)
具体的数据类型? 我试过对象,但没有改变任何东西。
任何想法为什么发生这种情况? 在此先感谢!
答
我找到了解决我的问题的方法。老实说这是@BalusC的一篇文章使用数据表:填充数据表是什么使我走上了正确的道路。
以前我在PreRenderView-Phase阶段添加了组件,然后我在你的例子中看到了你在getter中填充绑定组件ONCE(这显然是在RestoreView-Phase的早期阶段)。这就是我现在所做的并且工作完美无瑕,Inputfields现在可以双向工作(读取和写入)。
非常感谢您的工作@BalusC!