5

私は JSF 2.0 複合コンポーネントをいじっていますが、composite:attributeタグの require 属性が何を意味するのかについて少し混乱しています。ドキュメントには、ページ作成者がこの属性の値を提供する必要がある場合、required 属性は true であると記載されています。

私はこれを、required=true. また、空の文字列が有効な値であると想定しました。これが Mojarra 2.0.2 での動作です。

この単純なマネージド Bean を使用すると、次のようになります。

@ManagedBean(name = "simpleMB")
@ViewScoped
public class SimpleManagedBean implements Serializable {

   private static final long serialVersionUID = -1;

   private String whatever;

   ... setter and getter
}

そして複合コンポーネント:

<composite:interface>
    <composite:attribute name="value" required="true" />
</composite:interface>

<composite:implementation>
    <h:outputText value="Value: '#{cc.attrs.value}'" />    
</composite:implementation>

これらのタグは Mojarra 2.0.2 で機能しました:

<foo:bar value="" />
<foo:bar value="#{simpleMB.whatever}" />

しかし、2.0.3 にアップグレードすると、最初のタグしか機能しません。2 番目のタグにより、次のエラー メッセージが表示されます。

/requiredAttribute.xhtml @20,42 <foo:bar> The following attribute(s) are 
required, but no values have been supplied for them: value.

required を false に設定すると、正常に動作します。

必須属性の意味を誤解していませんか? 誰かが私が期待すべき動作を明確にすることができますか?

ありがとう。

4

3 に答える 3

2

@ViewScoped Bean との組み合わせで required="true" を使用すると、同様の問題が発生します。

私たちの場合、Bean は @ViewScoped Bean のように動作しなくなりました (毎回新しいコンストラクターが呼び出されます)。

あなたの問題は、Bean がスコープを失ったため、バリアベルが再び null になることでしょうか?

どちらの場合でも、required="true" を使用しないか、@SessionScoped Bean を使用することしかできません。

(おそらくこれは、Mojarra が @ViewScoped Bean のプロパティへのバインディングを処理できないという問題に関連しています)

于 2011-03-11T15:21:01.570 に答える
0

これはこの問題だったようで、少し前にクローズされたようですが、どのバージョンに含まれていたかはわかりません。

于 2011-09-05T09:09:36.387 に答える
0

バグなのかわかりませんが、エル式の性質です。デフォルトの式のタイプは文字列で、空の文字列は null として変換されます。

于 2010-11-23T12:25:49.230 に答える