0

1 つはプレーン Bean で、もう 1 つはマネージド Bean として機能する 2 つのクラスがあります。aboutProduct(List) をデータテーブルにバインドしようとしています。しかし、私は値を見ることができません。コードを参照してください。

 public class ProductInfoAttributes {

    private String paramName;
    private String paramValue;



    public String getParamName() {
        return paramName;
    }
    public void setParamName(String paramName) {
        this.paramName = paramName;
    }
    public String getParamValue() {
        return paramValue;
    }
    public void setParamValue(String paramValue) {
        this.paramValue = paramValue;
    }
    public ProductInfoAttributes(String paramName, String paramValue) {
        super();
        this.paramName = paramName;
        this.paramValue = paramValue;
    }



}


//------ Managed Bean Class
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

@Controller("productInfoBean")
@Scope("session")
public class ProductInfoBean implements Serializable {

    private static final long serialVersionUID = 1L;




    List<ProductInfoAttributes> aboutProduct;


    public List<ProductInfoAttributes> getAboutProduct() {
        return aboutProduct;
    }

    public void setAboutProduct(List<ProductInfoAttributes> aboutProduct) {
        this.aboutProduct = aboutProduct;
    }



    public List<ProductInfoAttributes> showDetails() {
        aboutProduct = new ArrayList<ProductInfoAttributes>();
        aboutProduct.add(new ProductInfoAttributes("Host Name", "localhost"));
        aboutProduct.add(new ProductInfoAttributes("Folder", "newfolder"));
        aboutProduct.add(new ProductInfoAttributes("App Server", "JBoss"));

        return aboutProduct;
    }

    public static String getName() {
        return name;
    }

}

/ -----そして、これが私のDatatableコードです。/

<h:dataTable value="#{productInfoBean.showDetails}" var="details">  /*----- my datatable  */
                    <h:column>
                        <f:facet name="header">Feature</f:facet>
                        <h:outputText value="#{details.paramName}" rendered="true" />
                    </h:column>

                    <h:column>
                        <f:facet name="header">Description</f:facet>
                        <h:outputText value="#{details.paramValue}" rendered="true" />
                    </h:column>
                </h:dataTable>  /*-----  data table ends.*/

どこが間違っているか教えてください。データテーブルで値を取得していません。私はJSF 1.2を使用しています

4

2 に答える 2

0

これを行う場合:

<h:dataTable value="#{productInfoBean.showDetails}" var="details">

jsf はメソッド getShowDetails() を呼び出そうとします。マネージド Bean で定義されたプロパティは、対応する getter および setter メソッドを呼び出すことにより、jsf ページからアクセス/変更されます。

しかし、マネージド Bean では、そのメソッドが宣言されていません。

showDetails() ではなく、Bean から getAboutProduct() を呼び出す必要があります。または、showDetails を getShowDetails() に変更することもできますが、getter 内にロジックを配置することはお勧めできません。その getter は DataTable 内の各エントリに対して呼び出されるためです。つまり、すべてのエントリに対して新しいリストが作成されます。

代わりに、Bean の初期化後にメソッドを呼び出す @PostConstruct アノテーションを使用してメソッド showDetails() を呼び出すか、次のようにページから直接呼び出すことができます。

#{productInfoBean.showDetails()} 

そして、この行を次のように変更します。

<h:dataTable value="#{productInfoBean.aboutProduct}" var="details">

これで、適切なゲッターが呼び出され、データが取得されます。

于 2013-06-12T14:49:26.683 に答える