У меня есть таблица тринидадов, в которой один столбец содержит раскрывающиеся списки (выберите один вариант) для каждой строки, а другой столбец содержит входной текст для каждой строки.
Когда выбрана конкретная опция, ввод становится редактируемым (иначе он остается только для чтения).
Поведение только для чтения и частичное событие работают идеально, как и ожидалось. Проблема заключается в том, что всякий раз, когда предполагается, что входной текст переходит из редактируемого в режим только для чтения, я все еще вижу значение, введенное ранее, когда вводимый текст был редактируемым.
Отсюда, если я выберу другую опцию (для которой вводимый текст будет также только для чтения), значение исчезнет.
Код 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 не содержит текста, хотя я могу видеть его на странице. Мне пришлось использовать FireBug для анализа элемента, который выявил следующее:
<div class="af_inputText_content"
id="j_id_jsp_545172797_17:0:j_id_jsp_545172797_27">
tttt
</div>
Используемая версия:
Тринидад 2.x
JSF 2.x
Tomcat 7.0