2012-07-19 71 views
2

我嘗試在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(...)具體的數據類型? 我試過對象,但沒有改變任何東西。

任何想法爲什麼發生這種情況? 在此先感謝!

回答

2

我找到了解決我的問題的方法。老實說這是@BalusC的一篇文章使用數據表:填充數據表是什麼使我走上了正確的道路。

以前我在PreRenderView-Phase階段添加了組件,然後我在你的例子中看到了你在getter中填充綁定組件ONCE(這顯然是在RestoreView-Phase的早期階段)。這就是我現在所做的並且工作完美無瑕,Inputfields現在可以雙向工作(讀取和寫入)。

非常感謝您的工作@BalusC!