我有一个 JSF 页面通过 ui:include -affordability.xhtml 加载到主页中。我的问题是第一次加载页面时不会触发 f:ajax onblur 事件。如果我刷新页面,则 ajax onblur 事件会正常触发。
问题是否与 f:ajax 标记在首次加载时找不到执行标记中列出的组件这一事实有关?我没有收到任何 js 错误或抛出 java/jsf 异常。
根据 Java EE 6 文档,可以在 f:ajax 标记内对组件进行分组。
另一个奇怪的问题是输入组件都保持焦点,即您可以单击多个输入框并且它们都保持在“焦点”中。
在下图中,我“选择”了 6 个输入框。
负担能力.xhtml 如下所示:
<h:panelGrid columns="2" style="font-size: 80%" id="incomePanel">
<f:facet name="header"><h:outputText value="Income"/></f:facet>
<f:ajax event="blur" execute="netSalary otherSalary" render="totalIncome affordabilityBreakdown">
<h:outputText value="Net salary as per Payslip"/>
<p:inputText id="netSalary" style="width:250px;" value="#{campaignBean.validBatchLead.lead.leadAffordability.incNetSalary}" required="true" requiredMessage="Please enter the Net Salary"/>
<h:outputText value="Other"/>
<p:inputText id="otherSalary" style="width:250px;" value="#{campaignBean.validBatchLead.lead.leadAffordability.incOther}" required="false"/>
<h:outputText value="Total" style="font-weight: bold; float: right"/>
<h:outputText id="totalIncome" value="#{campaignBean.validBatchLead.lead.leadAffordability.declaredIncome}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2"/>
</h:outputText>
</f:ajax>
</h:panelGrid>
<h:panelGrid columns="2" style="font-size: 80%; border: 1px dashed lightgray" id="affordabilityBreakdown">
<h:outputText value="Provisional Calculation" style="font-weight: bold;"/>
<h:outputText value="#{campaignBean.validBatchLead.lead.leadAffordability.provisional}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2"/>
</h:outputText>
<h:outputText value="Projected Expenses" style="font-weight: bold;"/>
<h:outputText value="#{campaignBean.validBatchLead.lead.leadAffordability.projectedExpenses}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2"/>
</h:outputText>
<h:outputText value="Disposable Income" style="font-weight: bold; background: #EE0000;"/>
<h:outputText value="#{campaignBean.validBatchLead.lead.leadAffordability.disposableIncome}"
style="font-weight: bold; background: #EE0000">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2"/>
</h:outputText>
</h:panelGrid>