3

プロジェクトはSpringWebflowとJSF(PrimeFaces)を使用します。私はf:attributeを持つap:commandButtonを持っています

<p:commandButton disabled="#{editGroupMode=='edit'}" action="edit_article_group"  actionListener="#{articleGroupManager.setSelectedRow}" ajax="false" value="Edit">    
    <f:attribute name="selectedIndex" value="${rowIndex}" /> 
</p:commandButton>

バックエンドコード(春に注入されたBean):

@Service("articleGroupManager")
public class ArticleGroupManagerImpl implements ArticleGroupManager{
    public void setSelectedRow(ActionEvent event) {
    String selectedIndex = (String)event.getComponent().getAttributes().get("selectedIndex");
    if (selectedIndex == null) {
      return;
    }
  }
}

属性「selectedIndex」は常にnullです。ここで何が起こったのか誰か知っていますか?ありがとうございました。

4

1 に答える 1

2

変数名「rowIndex」は、などの反復コンポーネント内でこれを宣言したことを示しています<p:dataTable>

その場合、これは実際には機能しません。コンポーネントツリーには、HTML出力の生成中に複数回再利用されるJSFコンポーネントが物理的に1つだけあります。は<f:attribute>、コンポーネントが作成された時点で評価されます(これは、反復のずっと前に1回だけ発生します)。コンポーネントが、現在反復されている行に基づいてHTMLを生成するときではありません。それは確かに常にですnull

とにかく具体的な機能要件を達成する方法はいくつかあります。最も正しいアプローチは、メソッド引数として渡すことです。

<p:commandButton value="Edit" 
    action="edit_article_group"  
    actionListener="#{articleGroupManager.setSelectedRow(rowIndex)}" 
    ajax="false" disabled="#{editGroupMode=='edit'}" />  

public void setSelectedRow(Integer rowIndex) {
    // ...
}

参照:


具体的な問題とは関係なく、この特定のケースでは、リクエストパラメータを含むGETリンクのみを使用して、リクエストをべき等にしました(ブックマーク可能、サーバー側に影響を与えずに再実行可能、検索ボットクロール可能など)。JSF2.0での通信-GET要求パラメータの処理も参照してください。

于 2012-09-19T16:06:55.507 に答える