0

我有两个类,一个是普通 bean,第二个是托管 bean。我正在尝试将 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;
    }

}

/ ----- 这是我的数据表代码。/

<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

中的showDetails()方法ProductInfoBean应该被调用getShowDetails()

于 2013-06-12T14:16:41.303 回答
0

当你这样做时:

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

jsf 尝试调用方法 getShowDetails()。通过调用相应的 getter 和 setter 方法,可以从 jsf 页面访问/更改托管 bean 中定义的属性。

但是在您的托管 bean 中,您没有声明该方法。

您应该从您的 bean 中调用 getAboutProduct(),而不是 showDetails()。或者,您可以将 showDetails 更改为 getShowDetails(),但将逻辑放在 getter 中是一种不好的做法,因为将为 DataTable 中的每个条目调用该 getter,这意味着它将为每个条目创建一个新列表。

相反,您可以使用 @PostConstruct 注释调用方法 showDetails() ,该注释将在 bean 初始化后为您调用该方法,或者您可以直接从页面调用它,例如:

#{productInfoBean.showDetails()} 

然后像这样修改这一行:

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

现在它将调用适当的 getter 并检索您的数据。

于 2013-06-12T14:49:26.683 回答