JavaJSF2属性不反映ajax操作后的更改
情况就是这样:
我有一个弹出框来选择列出的项目之一(单击ShowParentAssetSearch按钮)。选择后,所选项目的值将显示在主屏幕上。在主屏幕中,将有一个按钮来清除所选项目。它将触发对托管bean的ajax操作以清除绑定值(通过单击clearParentAssetButton)
当我进行调试时,该值是清晰的,不会显示在主屏幕上。但是,当我单击save按钮时,我注意到应该为空的属性实际上并不是空的。它仍然保持价值
以下是用户界面代码片段:
<h:panelGroup id="myregion">
<p:inputText id="parentAsset"
ondblclick="parentAssetDlg.show()"
value="#{assetMasterCreatePage.parentAsset.shortName}"
rendered="#{not empty assetMasterCreatePage.parentAsset}"/>
</h:panelGroup>
<p:commandButton icon="ui-icon-search"
id="showParentAssetSearchButton"
type="button"
title="#{msg.label_asset_search_parent_asset}"
onclick="parentAssetDlg.show()" />
<p:commandButton icon="ui-icon-trash"
id="clearParentAssetButton"
title="#{msg.label_asset_clear_parent_asset}"
actionListener="#{assetMasterCreatePage.doResetParentAsset}"
immediate="true"
process="@form"
update="clearParentAssetButton, myregion"
disabled="#{empty assetMasterCreatePage.parentAsset}" />
........
<p:commandButton value="#{msg.button_save}" icon="ui-icon-disk"
action="#{assetMasterCreatePage.doSaveAsset}" />
这是托管bean片段
@ManagedBean(name="assetMasterCreatePage")
@ViewScoped
public class AssetMasterCreatePage extends DefaultAssetMasterPage {
private AssetMaster assetMaster;
private AssetMaster parentAsset;
..........
.........
public void doResetParentAsset(){
parentAsset = null;
}
public String doSaveAssetMaster(){
assetMaster.setParentAsset(parentAsset);
assetMasterService.save(assetMaster);
MessageUtils.saveSuccessMessage();
return "save";
}
}
如您所见,当clearParentAssetButton的按钮被单击时,它将触发ajax操作#{assetMasterCreatePage.doResetParentAsset}以重置parentAsset的值。这里的问题是在保存时,应该为null的parentAsset不为null
我正在使用JSF2来执行这些任务
# 1 楼答案
奇怪的是,有没有其他字段包含
parentAsset
的值,我的意思是在页面中,有一些字段<h:inputText value="parentAsset.shortName"/>
,当您单击save按钮时,一个新的parentAsset
被初始化并保存,您还可以调试它,并查看parentAsset
的哈希代码,以确保是否相同