[英]How to set JSF input field value before submit
我有一个带有一些输入字段的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方法。
从输入和命令组件中删除immediate="true"
。 除非您确实了解应使用immediate
否则不要使用immediate
数。 此外,您还需要在命令组件的update
属性中包含要处理的输入组件。 请注意,这应该代表客户端ID,而不是您的注释之一中提到的属性名称。
<p:calendar id="hiredate" value="#{userWizardMB.user.hireDate}" required="true" />
...
<p:commandButton value="Calculate days" icon="ui-icon-circle-check"
action="#{userWizardMB.calculateVacationDays}"
process="@this hiredate" update="vacationDays" />
使用process="@form"
(或process="[the id of the calendar component]"
在commandButton
process="@this"
表示仅更新与命令按钮相关的模型部分(通常不更新)。
旧问题,但是您是否在commandButton标记中添加了partialSubmit="true"
? 至少在PrimeFaces 3.5中,false是此属性的默认值(请参阅PrimeFaces PDF文档)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.