これは状況です:
リストされた項目の 1 つを選択するためのポップアップ ボックスがあります (showParentAssetSearchButton をクリックします)。選択すると、選択した項目の値がメイン画面に表示されます。メイン画面には、選択したアイテムをクリアするためのボタンがあります。マネージド Bean への ajax アクションをトリガーして、バインド値をクリアします (clearParentAssetButton をクリックします)。
デバッグを行うと、値が明確になり、メイン画面に表示されなくなります。しかし、保存ボタンをクリックすると、空であるべきプロパティが実際には空ではないことに気付きます。それはまだ値を保持します。
スニペット UI コードは次のとおりです。
<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 ではないことです。
私は JSF 2 を使用してタスクを実行しています。