2

私はJSFが初めてで、管理プロパティに関連するいくつかの質問に対する回答を探しています。

私は非常に古いコードで作業しており、それを更新しようとしています。

<managed-bean>
  <managed-bean-name>bean</managed-bean-name>
  <managed-bean-class>com.example.Bean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
    <property-name>serviceLocalizator</property-name>
    <value>#{serviceLocalizator}</value>
  </managed-property>
  <managed-property>
    <property-name>market</property-name>
    <value>#{param['market']}</value>
  </managed-property>
  <managed-property>
    <property-name>produktId</property-name>
    <value>#{param['produkt.id']}</value>
  </managed-property>
</managed-bean>

Bean クラスでは、市場のセッターと製品のゲッターがあり、市場は別のクラスの一部です。

private SomeClass daneIn;

public void setMarket(Long market) {
    this.daneIn.setMarket( market );
}

private SomeClass2 produkt;

public  SomeClass2 getProdukt() {       
    return produkt;
}

productIdserviceLocalizatorセッターとゲッターはありません。「daneIn」に接続された「market」のようなプロパティが他にもあります。

誰でも理由を説明できますか:

  1. 削除すると、静的メソッドを呼び出しますが、<managet-property>のヌルポインター例外があります。ServiceLocalizatorそれを理解するには何を読むべきですか?
  2. ドットの代わりに、なぜfaces-configがブラケット[]を使用するのですか? POSTまたはGETで接続していますか?
  3. @ManagedPropertydaneIn の「マーケット」やその他のプロパティに使用できますか? はいの場合、どのように?
4

1 に答える 1

3

1)「削除するとき」とは、ServiceLocalizator 用に定義された管理プロパティを削除していると仮定します。プロパティを注入する命令がないため、その変数は null になります。それを使用すると、NPE が発生します。

2)ブラケット表記は、ケースをカバーするものを含め、さまざまな目的に使用されます。キーによってマップの値を取得できますが、ここでは、'produkt.id'キーとして使用される値に 1 つ以上のピリオドが含まれているため、角かっこで囲まれた要素の値を取得しています。ピリオドを外せば使え#{param.produktid}ます。(この手順についてBalusCに感謝します)

3)アノテーションを使用して注入するプロパティを宣言し、セッターを提供する必要があります。

public class YourBean {

    //Also, you can use #{param['market']} as the value of the ManagedProperty        
    @ManagedProperty(value = "#{param.market}")
    private Long market;

    public void setMarket(Long market) {
        this.market = market;
    }

}
于 2012-09-26T17:29:39.597 に答える