1

これは状況です:

リストされた項目の 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 を使用してタスクを実行しています。

4

1 に答える 1

-1

奇妙なことに、の値を保持する他のフィールドはありますかparentAsset?つまり、ページにあり <h:inputText value="parentAsset.shortName"/>、保存ボタンをクリックすると、新しいparentAssetものが初期化されて保存され、デバッグしてparentAssetのハッシュを表示するなどのフィールドがあります。同じかどうかを確認するためのコード。

于 2013-01-10T09:16:50.670 に答える