【发布时间】:2012-12-14 09:49:33
【问题描述】:
我有一个带有 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 因为我真的需要这个值来进行计算?
谢谢
编辑:我删除了表单中的所有其他字段和立即属性:
<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>
并且仍然没有调用 backing bean 方法。
【问题讨论】:
标签: jsf jsf-2 primefaces