使用JSF 2.0调用RenderResponse调用Ajax请求后保留文本框数据

时间:2012-02-07 21:52:07

标签: ajax jsf-2 lifecycle

当我使用immediate = true执行ajax操作时,如何保留文本框值?我需要渲染整个表单。我想在执行ajax操作时跳过验证并更新模型阶段。我已经尝试在ajax操作调用的方法的末尾使用FacesContext.getCurrentInstance()。renderResponse()但它不起作用。旧值出现在文本框中,或者某些数据在某些文本框中被清除。我还不想更新支持bean。

我想要做的是保留用户填写文本框的信息。我使用的Ajax按钮动态添加更多文本框,我在ajax按钮中设置渲染属性来渲染整个页面(我需要做一个完整的渲染)。在我使用ajax动作调用的方法中,我有“FacesContext.getCurrentInstance()。renderResponse();”

按钮代码为:

<h:commandButton id="btnAdd" value="Add" type="button">
<f:ajax event="click" execute="@form" render=":form" listener="#{ManagedBean.add()}"/>
</h:commandButton>

听众的行动是:

public void add() {
   Person p = new Person();
   ManagedBean.getPeople().add(p);
   FacesContext.getCurrentInstance().renderResponse();
}

我有一个ui:重复迭代“people”列表,文本框的代码是:

<ui:repeat value="#{ManagedBean.people}" var="currentPerson" varStatus="i">
<h:inputText id="p" readonly="false" label="Person" value="#{currentPerson.name}"  >
</h:inputText>
</ui:repeat>

我正在重新调整JSF阶段,我得到了:

[2/7/12 15:06:33:584 CST] 0000002f SystemOut     O START PHASE RESTORE_VIEW 1
[2/7/12 15:06:34:375 CST] 0000002f SystemOut     O END PHASE RESTORE_VIEW 1
[2/7/12 15:06:34:981 CST] 0000002f SystemOut     O START PHASE APPLY_REQUEST_VALUES 2
[2/7/12 15:06:35:553 CST] 0000002f SystemOut     O END PHASE APPLY_REQUEST_VALUES 2
[2/7/12 15:06:36:089 CST] 0000002f SystemOut     O START PHASE RENDER_RESPONSE 6
[2/7/12 15:06:44:364 CST] 0000002f SystemOut     O END PHASE RENDER_RESPONSE 6

有没有办法从文本框中提取数据并在ajax调用后再次将它们设置到视图中?感谢。

1 个答案:

答案 0 :(得分:0)

你可以为人们使用包装类。然后你可以让JSF调用setter并且不会触及原始的person对象。

MAG, Milo van der Zee