У меня есть вызов ajax, который обновляет значение в моем dto и должен обновить форму, чтобы остановить рендеринг определенного компонента. Когда режим пробной версии изменяется, он должен обновить значение Java (которое работает правильно, а также остановить рендеринг в поле ограничения по времени.
Если установлено update = "@ form", рендеринг работает правильно, однако все значения также удаляются из формы, что недопустимо. Если я пытаюсь нацелить обновление на идентификатор поля, оно не работает, я предполагаю, что это как-то связано с повторением. Идентификатор компонента при проверке веб-страницы - «offencesForm: offenses: 0: statutoryTimeLimit», однако обновление, которое также не работает.
Любая помощь в обновлении рендеринга компонента без очистки значений в остальной части формы была бы полезной.
Раскрывающийся список, который вызывает метод, по которому выполняется удар.
<ui:repeat id="offences" value="#{casefileDto.offences}" var="_offence" varStatus="n">
<!-- Update Time Limit value in dto & update component to render statutoryTimeLimit by modeOfTrial value -->
<ecis:field label="Mode of trial" starred="true" help="#{label['casefile.help.modeOfTrial']}" helpLayout="hover">
<p:selectOneMenu value="#{_offence.modeOfTrial}"
converter="omnifaces.SelectItemsIndexConverter"
required="${param['skipValidation'] == null}" requiredMessage="Please select the mode of trial">
<f:selectItem noSelectionOption="true" itemLabel="" itemValue="#{null}"/>
<f:selectItems value="#{conditionCache.modeOfTrialConditions}" />
<p:ajax event="change" update="statutoryTimeLimit" listener="#{_offence.onTrialModeSelect()}"/>
</p:selectOneMenu>
</ecis:field>
<!-- Render based off modeOfTrial values -->
<ecis:field id="statutoryTimeLimit" label="Statutory time limit expires on" rendered="#{supplementary and _offence.timeLimitRequired()}"
help="Calculated from 'Date of offence' plus six months." helpLayout="hover">
<h:outputText value="#{_offence.statutoryTimeLimit}" >
<f:convertDateTime pattern="#{cvCache.dateFormat}" />
</h:outputText>
</ecis:field>
</ui:repeat>
Java-код
public boolean timeLimitRequired() {
return modeOfTrial != null && modeOfTrial.getValue().contains("(SST)");
}
public void onTrialModeSelect() {
if (getModeOfTrial().toString().equals("Not suitable for summary trial (NSST)")) {
setStatutoryTimeLimit(null);
} else {
onOffenceDateSelect();
}
}
Любая помощь будет высоко ценится.