【问题标题】:JSF grouping components within f:ajaxf:ajax 中的 JSF 对组件进行分组
【发布时间】:2012-08-21 08:43:48
【问题描述】:

我有一个 JSF 页面通过 ui:include -affordability.xhtml 加载到主页中。 我的问题是第一次加载页面时不会触发 f:ajax onblur 事件。如果我刷新页面,则 ajax onblur 事件会正常触发。

问题是否与 f:ajax 标记在首次加载时无法找到 execute 标记中列出的组件这一事实有关?我没有收到任何 js 错误或 java/jsf 异常。
根据 Java EE 6 文档,可以在 f:ajax 标记内对组件进行分组。

另一个奇怪的问题是输入组件都保持焦点,即您可以单击多个输入框并且它们都保持在“焦点”中。

在下图中,我“选择”了 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>

【问题讨论】:

  • 应该是 EE6。 J2EE 指的是企业 java 5 之前的版本。
  • 另一种选择(我试图避免)是为每个 p:inputText 添加一个 ajax 标记。这确实有效,但是由于页面包含 25 个 p:inputText 标记,这是一个混乱的解决方法。
  • 这样的事情可能会归结为一些荒谬的事情,例如您是否在浏览器中观察到了这种行为(可能是浏览器的怪癖)?您确定这与您正在测试的特定 PC 无关吗?也让我们拥有您的 Primefaces 版本。尝试升级到最新版本(目前为 3.4.1)

标签: jsf-2 primefaces onblur


【解决方案1】:

当页面加载时,onblur 事件有什么作用?填充字段的目的是什么?如果是这样,您可以使用

【讨论】:

  • 您不了解具体问题。 OP 告诉 Ajax blur 事件在页面第一次加载后根本不起作用。 IE。当最终用户离开现场时,永远不会调用 blur 事件。它仅在页面刷新后才起作用。 OP 根本没有询问如何在页面加载时执行某些逻辑。
  • @BalusC 我在写的时候回答了这个问题。他问为什么页面第一次加载时ajax 没有触发。页面首次加载时。如果重点是 onblur 从来没有工作,他可以​​明确地说出来。我还要求澄清他想要做什么以及为什么,然后提供了一种在页面首次加载时操作数据的替代方法。也许你对他的意思的假设是正确的。没有澄清,我们不会知道。但至少我提供了一个与实际要求一致的答案。如果代码没有错,则否决票。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2011-11-08
  • 1970-01-01
  • 2011-07-28
  • 2019-11-21
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多