【问题标题】:Multiple ajax calls clears out previously submitted values in managed bean多个 ajax 调用清除托管 bean 中先前提交的值
【发布时间】:2011-08-18 14:57:59
【问题描述】:

我在同一页面上进行多个 ajax 调用时遇到问题。 “模糊”事件的第一个 ajax 调用会填充一个下拉列表。然后,当单击按钮时,页面应该根据表单中的值显示“otherElement”。问题是当“term”在最后一个 ajax 调用的执行中时,它还会导致 FormBean 中的 term、CompanyCode 和 fileNumber 为空。当我静态填充术语时,它可以工作。

<h:form id="createRequest">

            <h:selectOneMenu id="CompanyCode" required="true"
                value="#{FormBean.CompanyCode}"> 
                <f:selectItems value="#{utility.Companies}" />
            </h:selectOneMenu>
            <br/>

            <h:inputText id="fileNumber" styleClass="field"
                value="#{FormBean.fileNumber}"
                required="true">
                <f:ajax event="blur" execute="CompanyCode fileNumber"
                    render="term" />
            </h:inputText>
            <br />

            <h:selectOneMenu id="term" required="true"
                value="#{FormBean.term}">
                <f:selectItems value="#{FormBean.terms}" />
            </h:selectOneMenu>

            <br />

            <h:commandButton class="button" style="button"
                value="#{resources['btn.common.submitRequest']}">
                <f:ajax event="click"
                    execute="CompanyCode fileNumber term"
                    render="otherElement" />
            </h:commandButton>

        </h:form>

有什么想法吗?谢谢

【问题讨论】:

  • 您的支持 bean 在什么范围内?你介意张贴吗?
  • k.那正是我所想。见下文。

标签: ajax jsf


【解决方案1】:

您的 bean 可能是请求范围的,这会导致它在每个 HTTP 请求(无论是否为 ajax)上一次又一次地重新创建。 ajax 请求设置的所有更改/属性都会在后续请求中丢失。您需要将 bean 放在视图范围内。

@ManagedBean
@ViewScoped
public class FormBean implements Serializable {
    // ...
}

这样,只要您从操作方法返回 voidnull,bean 就会一直存在。

另见:

【讨论】:

  • 太棒了!就是这样。我认为解决方案相当简单,我只是找不到它。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2011-01-08
  • 1970-01-01
相关资源
最近更新 更多