3

我有一个 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>
4

1 回答 1

-1

页面加载时尝试使用 onblur 事件做什么?填充字段的目的是什么?如果是这样,您可以改用 <f:event type="preRenderView ... > 吗?

例如,将其添加到页面:

<body>
    <ui:define name="metadata">
        <f:view>
            <f:metadata>
                <f:event type="preRenderView" listener="#{campaignBean.init}" />
            </f:metadata>
        </f:view>
    </ui:define>

<ui:composition template ="...

然后,您在 CampaignBean 的“init”方法中填充字段(假设这是您的托管 bean)。但是,如果不告诉我们您要做什么,要提供帮助并不容易。如果不是这样,其他人有想法吗?:)

于 2012-09-10T06:18:55.127 回答