我有一个ajax调用,该调用会更新我的dto上的值,并且应该更新表单以停止呈现某个组件。更改试用模式后,它应该更新一个Java值(该值工作正常,并且还会在时间限制字段中停止呈现。
如果设置了update =“ @ form”,则呈现工作正常,但是从表单中清除了所有值,这也是不可接受的。如果我尝试将更新定位于字段的ID,则无法正常工作,我认为这与重复有关。检查网页时组件的ID为'offencesForm:offences: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();
}
}
任何帮助将不胜感激。