バッキング 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>
<h:inputText/>
PanelGroupの内部はテスト用であり、ここで行ったバインディングsetValueExpression(...)
が少なくとも読み取り専用で動作することがわかりました。
ブラウザには、最初に「testInput」、次に「operandInputText」の 2 つの入力フィールドがあります。「operandInputText」に値を入力して送信すると、値は保存されませんが、「testInput」フィールドに値を入力すると、値が送信され、さらに両方の入力フィールドに値が表示されます。
operandValues は単純なオブジェクト配列です。
private Object[] mOperandValues = new Object[2];
これは、私が渡す dataType と関係がありsetValueExpression(...)
ますか? オブジェクトを試しましたが、何も変わりませんでした。
なぜこれが起こるのか分かりますか?前もって感謝します!