无法从托管bean获取dataTable中的值

时间:2013-06-12 14:14:30

标签: java jsf datatables

我有两个类,一个是普通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

2 个答案:

答案 0 :(得分:0)

showDetails()中的ProductInfoBean方法应称为getShowDetails()

答案 1 :(得分:0)

执行此操作时:

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

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

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

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

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

#{productInfoBean.showDetails()} 

然后像这样修改这一行:

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

现在它将调用相应的getter并检索您的数据。