1 つの列に各行のドロップダウン (1 つの選択肢を選択) が含まれ、別の列に各行の入力テキストが含まれるトリニダード テーブルがあります。
特定のオプションを選択すると、入力が編集可能になります (それ以外の場合は読み取り専用のままです)。
読み取り専用の動作と部分的なイベントは、期待どおりに完全に機能しています。問題は、入力テキストが編集可能から読み取り専用に移動することになっているときはいつでも、入力テキストが編集可能だったときに以前に入力された値が表示されることです。
ここから別のオプション (入力テキストも読み取り専用) を選択すると、値が消えます。
JSP コードは次のとおりです。
<tr:table emptyText="No Data" var="vo" autoSubmit="true" partialTriggers="accountType" value="#{testingBean.voList}" binding="#{testingBean.table}" width="50%">
<tr:column>
<f:facet name="header">
<tr:outputText value="Sl No" />
</f:facet>
<tr:outputText value="#{vo.slNo}" />
</tr:column>
<tr:column>
<f:facet name="header">
<tr:outputText value="Account Type" />
</f:facet>
<tr:selectOneChoice unselectedLabel="Select" id="accountType" value="#{vo.accountType}"
autoSubmit="true" immediate="true" valuePassThru="true"
valueChangeListener="#{testingAction.optionsChanged}">
<f:selectItems value="#{testingBean.options}" />
</tr:selectOneChoice>
</tr:column>
<tr:column>
<f:facet name="header">
<tr:outputText value="Other" />
</f:facet>
<tr:inputText value="#{vo.otherType}"
partialTriggers="accountType"
readOnly="#{vo.readOnlyFlag}"></tr:inputText>
</tr:column>
</tr:table>
valueChangeListener のコードは次のとおりです。
public void optionsChanged(ValueChangeEvent vce) {
try {
System.out.println("Inside Method");
testingBean = (TestingBean) FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("testingBean");
ArrayList<TableRowVO> list = testingBean.getVoList();
UIXTable table = testingBean.getTable();
TableRowVO vo = list.get(table.getRowIndex());
vo.setReadOnlyFlag(true);
vo.setAccountType(vce.getNewValue().toString());
vo.setOtherType("");
if (vce.getNewValue().equals("3")) {
System.out.println("Setting false");
vo.setReadOnlyFlag(false);
}
list.set(table.getRowIndex(), vo);
table.setValue(list);
testingBean.setVoList(list);
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().put("testingBean", testingBean);
} catch (Exception e) {
e.printStackTrace();
}
}
この動作は予期されたものですか? または回避策はありますか?
興味深いことに、Firefox の [View Page Source] オプションにはテキストが含まれていません。FireBug を使用して要素を分析する必要があり、次のことが明らかになりました。
<div class="af_inputText_content"
id="j_id_jsp_545172797_17:0:j_id_jsp_545172797_27">
tttt
</div>
使用したバージョン: Trinidad 2.x JSF 2.x Tomcat 7.0