1

私はこの f:viewParam を持って値を設定し、ビューでバックビーンを検索します:

<f:metadata>
<f:viewParam name="id"
    value="#{editorBean.id}"
    required="true" />
<f:event type="preRenderComponent"
    listener="#{editorBean.search}" />
...

裏豆:

private String id; // getters setters

public void search(ComponentSystemEvent event) {


    if (id != null) {
            //search data in DB to construct TreeNode finBy(id)...
...

バッキング Bean で id が null であるため、ブラウザーではツリーの 2 番目のレベルを展開できません。

ここに画像の説明を入力

デバッグ:

ここに画像の説明を入力

すべての呼び出しで f:viewParam を設定する方法は?

4

1 に答える 1

3

<h:form>これは、クエリ文字列のない URL にデフォルトで送信されるために発生します。

Beanをビュースコープに入れるか、

@ManagedBean
@ViewScoped
public class EditorBean {

ポストバック中に prerenderview をスキップします

public void search(ComponentSystemEvent event) {   
    if (FacesContext.getCurrentInstance().isPostback()) {
        return;
    }

    // ...
} 

ビュー スコープの Bean は、同じビューを操作している限り存続するため、プロパティを何度も初期化する必要はありません。

または、フォーム アクション URL にビュー パラメータを含めるための属性を提供するOmniFacesを利用します。 <o:form>includeViewParams

<o:form includeViewParams="true">

以下も参照してください。

于 2013-05-24T12:26:26.130 に答える