3

ui:include -afdability.xhtml を介して JSF ページをメイン ページにロードしました。私の問題は、ページが最初に読み込まれたときに f:ajax onblur イベントが発生しないことです。ページを更新すると、ajax onblur イベントが通常どおり発生します。

この問題は、f:ajax タグが最初のロード時に execute タグ内にリストされたコンポーネントを見つけられないという事実に関連していますか? js エラーや java/jsf 例外がスローされません。
Java EE 6 のドキュメントによると、f:ajax タグ内でコンポーネントをグループ化しても問題ありません。

もう 1 つの奇妙な問題は、すべての入力コンポーネントがフォーカスを維持することです。つまり、複数の入力ボックスをクリックしても、すべてが「フォーカス」されたままになります。

下の画像では、6 つの入力ボックスを「選択」しています。 ここに画像の説明を入力

affordability.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 に答える