Overriding Declarative Method

 
Overriding Declarative Method
宣言メソッドの上書きを使うとき:
①  Managed-beanのscopeがsessionの場合:以下ようなエラーが出てきた。
JBO-29000: javax.faces.FacesException: 参照先オブジェクト : '#{bindings}' の範囲が参照元オブジェクトより短くなっています
②  Managed-beanのscopeがrequestの場合:以下ようなエラーが出てきた。
JBO-29000: java.lang.IllegalArgumentException: Object: {} is not a known entity type.; nested exception is: java.lang.IllegalArgumentException: Object: {} is not a known entity type.
原因:
① 宣言メソッドの上書きを含めてある Managed-beanのscopeは必ずrequestとなる。Scopeがsessionだったら、以下のエラーになります:
JBO-29000: javax.faces.FacesException: 参照先オブジェクト: '#{bindings}' の範囲が参照元オブジェクトより短くなっています
  原因:これは、上書きするメソッドを含むマネージドBeanのスコープが、 requestより大きい(つまり、 sessionまたは applicationである)ためです。メソッドで参照されるバインディング・コンテナ内のデータのスコープが requestであるため、このマネージドBeanのスコープは requestか、より小さいスコープに設定する必要があります。
 
              今は二つ画面:一覧画面 ―> 編集画面。
    遷移元画面(一覧画面)の処理:
                  <af:setActionListener from="#{row.itemCode}"
                                  to="#{backing_untitled4.itemCode}"/>
   遷移先画面(編集画面)の処理:
        <methodAction id="mergeEntity"
                   … … … …
          <NamedData NDName="entity"
                 NDValue="${bindings.searchXxodfItemIter.currentRow.dataProvider}"
                 NDType="java.lang.Object"/>
           </methodAction>
  宣言メソッドの上書きを使うとき:以下の現象が発生されます:
Managed-beanのscopeがrequestの場合: 編集画面から遷移元画面(一覧画面)へ戻るとき、更新されたデータは遷移元画面テーブルの一行目だけに表示されまして、元々の一行目は隠されました。更新元データもテーブルに保留されます。 Session の場合は問題がない。
  原因:具体的に原因分からないですけど、たぶん渡しているパラメータを落ちました。
  解決:遷移元画面のパラメータを直接に遷移先画面のマネージド bean のプロパティへ渡されない。この二つ画面間に新しい sessionBean を作成して、遷移元画面のパラメータをこの新作成の sessionBean に渡します。
 
また:
上書き済メソッドを使用するボタンをクリックすると、 #{bindings}という値(バインディング・コンテナへの参照)を持つ管理プロパティがバッキングBeanに追加される。
 Faces-config.xmlファイルに以下のソースを追加:
<managed-property>
                        <property-name>bindings</property-name>
                        <value>#{bindings}</value>
           </managed-property>
  Managed-bea ファイルに以下のソースを追加:
              private BindingContainer bindings;
              public BindingContainer getBindings() { return this.bindings; }
             public void setBindings(BindingContainer bindings) { this.bindings = bindings;}
 
           public String commandButton1_action() {   
                      BindingContainer bindings = getBindings();
                      OperationBinding operationBinding =
                                               bindings.getOperationBinding("mergeEntity");
                      Object result = operationBinding.execute();
                      if (!operationBinding.getErrors().isEmpty()) {
                                 return null;
                      }
                      return "back";
             }
それで、 上書き済メソッドを削除する時、Faces-config.xmlファイルに以上のソースも必須削除されます、逆には、既存のファイルに新しいコントロールをドラッグして、同じエラーが表示される。
 
参考ファイル:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值