0

JSF の ajax レンダリングに関して奇妙な動作を見つけましたが、何が欠けているのかわかりません。簡単にするために、h:inputTextと と があり、h:panelGrid内部にボタンがあるページがあります。誰かがボタンをクリックすると、 の値がh:inputText標準値に設定され、h:panelGridが消えるはずです。最初にコードを示してから、もう少し説明します。

xhtml ページ:

<h:inputText id="trackingIdValue" value="#{bean.trackingId}" />

<h:panelGrid border="15"  id="panel"  rendered="#{not empty bean.list}">
    <h:commandButton action="#{bean.render}" value="Clear Panel" >
        <f:ajax execute="@this" render="panel trackingIdValue" />
    </h:commandButton>
</h:panelGrid>

対応するビーン:

private Long trackingId;
private List<String> list;

public Long getTrackingId() {
    return trackingId;
}

public List<String> getList() {
    return list;
}

public void setList( List<String> list ) {
     this.list = list;
}

@PostConstruct
public void init() {
     // the list will be filled with some initial values
}

public void render() {
     this.trackingId = 954643L;
     list.clear();
}

ページが読み込まれると、リストにいくつかの値が入力されますPostConstruct。リストは現在空ではないため、これによりパネルが表示されます。しかし、パネルのボタン (trackingId を変更してリストを空にする場所) をクリックすると、trackingId が GUI で変更されますが、パネルは引き続き表示されます。私は何を間違えましたか?

更新 1

コメントに書かれているように、空のプロジェクトで上記のコードを試したところ、動作しました。私は現在、非常に大きなアプリケーションを持っているので、ページを縮小して次のように終了しました。

私のプロジェクトは複数のページ テンプレートで構成されています。私のマスター レイアウトにはh:head、アプリケーションに必要な多くのスタイルシートをロードするタグがあります。タグを完全に削除するh:headと機能しますが、もちろんスタイリングはかなり悪いです。これは私の ajax ローディングとパネルグリッドと何の関係がありますか?

更新 2

アプリケーションを 1 つの小さなページに短縮しました。

<h:head>
    <h:outputStylesheet name="masterStyle.css" library="css"  />
</h:head>
<h:body>
    <h:form>
        <h:inputText id="trackingIdValue" value="#{testBean.trackingId}" />
        <h:panelGroup border="15" id="panel"
            rendered="#{not empty testBean.list}">
            <h:commandButton action="#{testBean.render}" value="Clear Panel">
                <f:ajax execute="@this" render="panel trackingIdValue" />
            </h:commandButton>
        </h:panelGroup>
    </h:form>
</h:body>
</html>

ヘッダー タグを削除すると、ajax リクエストは入力テキストとパネルの両方で正常に機能します。しかし、上記のようにスタイルシートをヘッダーに追加すると、ajax は入力テキストでのみ機能します。

4

0 に答える 0