我有两个类,一个是普通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
答案 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并检索您的数据。