私は、いくつかの入力フィールドを持つ PrimeFaces を含む JSF ページを持っています。送信が完了する前に、フィールドの値をメソッドの入力として使用して、フォームを送信せずに別のフィールドを結果で更新したいと考えています。
これは、メソッドの入力として使用されるフィールドです。
<h:outputLabel for="hiredate" value="#{msgs['addUser.hireDate']}" />
<p:calendar id="hiredate" value="#{userWizardMB.user.hireDate}" required="true" immediate="true"/>
<p:message for="hiredate" />
をクリックすると計算が行われます<p:commandButton>
。
<p:commandButton value="Calculate days" icon="ui-icon-circle-check" action="#{userWizardMB.calculateVacationDays}" update="vacationDays" process="@this" immediate="true"/>
そして、これは呼び出されたメソッドです:
public void calculateVacationDays() {
user.setVacationDays((int) vacationDaysCalculator
.calculateWithHireDate(user.getHireDate()));
}
ただし、デバッグ時に、フォームに値を設定しても、このフィールドが NULL であることがわかります。
このフィールド user.hireDate の設定を強制するにはどうすればよいですか? 計算にはこの値が本当に必要なので?
ありがとうございました
編集:フォーム内の他のすべてのフィールドとimmediate属性を削除しました:
<h:form id="addUserForm">
<p:wizard widgetVar="wizard" flowListener="#{userWizardMB.onFlowProcess}">
<!-- TAB FOR PERSONAL DATA -->
<p:tab id="personal" title="#{msgs['addUser.personalTab']}">
<p:panel header="#{msgs['addUser.personalInformation']}">
<p:message for="vacationDays" showDetail="true" autoUpdate="true" closable="true"/>
<h:panelGrid columns="3" columnClasses="label, value" styleClass="grid">
<h:outputLabel for="hiredate" value="#{msgs['addUser.hireDate']}" />
<p:calendar id="hiredate" value="#{userWizardMB.user.hireDate}" required="true" />
<p:message for="hiredate" />
<h:outputLabel for="vacationDays" value="#{msgs['addUser.vacationDays']}"/>
<p:inputText id="vacationDays" value="#{userWizardMB.user.vacationDays}"/>
<p:commandButton value="Calculate days" icon="ui-icon-circle-check" action="#{userWizardMB.calculateVacationDays}" process="@this hiredate" update="vacationDays"/>
</h:panelGrid>
</p:panel>
</p:tab>
</p:wizard>
</h:form>
また、バッキング Bean メソッドはまだ呼び出されていません。