我在视图中有一个表单,它执行自动完成和gmap本地化的ajax部分处理.我的支持bean实例化一个实体对象"Address",并且该对象引用了表单的输入:
@ManagedBean(name="mybean")
@SessionScoped
public class Mybean implements Serializable {
private Address address;
private String fullAddress;
private String center = "0,0";
....
public mybean() {
address = new Address();
}
...
public void handleAddressChange() {
String c = "";
c = (address.getAddressLine1() != null) { c += address.getAddressLine1(); }
c = (address.getAddressLine2() != null) { c += ", " + address.getAddressLine2(); }
c = (address.getCity() != null) { c += ", " + address.getCity(); }
c = (address.getState() != null) { …Run Code Online (Sandbox Code Playgroud) 我有一个两个标签页,一个标签是记录列表,单击记录将切换到编辑选项卡,并在编辑选项卡中有保存和取消按钮.
现在,我点击记录#1,进行一些编辑,然后单击取消按钮.当然我不想验证表格,因为它被取消了,所以我设置immediate="true"了取消按钮.现在关闭编辑选项卡,返回到记录列表.然后,我点击另一条记录#2,发生了问题:在编辑选项卡中,它仍然是记录#1的先前内容,而不是记录#2.我在调试视图中检查了变量,编辑表单的后端bean实际上填充了记录#2.
也就是说,在立即命令之后就会出现问题.
(在我添加验证和immediate ="true"之前,一切都很顺利.)
class FormBean {
Record activeRecord;
...
public void clickOnList() {
activeRecord = loadRecord(clickIndex);
}
public void cancelForm() {
activeRecord = null;
}
}
Run Code Online (Sandbox Code Playgroud)
page.xhtml:
<h:form id="main">
...
<p:tab title="Edit" rendered="#{formBean.activeRecord != null}">
...
<p:commandButton value="Cancel"
actionListener="#{formBean.cancelForm}"
update="main" async="true" immediate="true" />
</p:tab>
</h:form>
Run Code Online (Sandbox Code Playgroud)