JSF错误:/fstation/search.jspx(24,62) '#{vManager.fStations}' Property 'fStations' not found on type vm.beans.VisitorManagertype
vManager是我管理的:
search.jspx
<h:form>
<h:dataTable value="#{vManager.fStations}" var="row">
<h:column>
<f:facet name="header"><h:outputText value="ID"/></f:facet>
<h:outputText value="#{row.id}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="NAME"/></f:facet>
<h:outputText value="#{row.name}"/>
</h:column>
</h:dataTable>
</h:form>
托管了这样的代码:
package vm.beans;
import vm.model.DataManager;
import java.util.ArrayList;
import java.util.List;
public class VisitorManager {
private List<FireStation> fStations;
private DataManager dataManager = new DataManager();
private String fireStationName;
public String searchFireStation(){
//String fName =fStation.getName();
System.out.println("this is "+fireStationName);
return null;
}
public void deleteStation(){
}
/*
* getter and setter
*/
public String getFireStationName(){
return fireStationName;
}
public void setFireStationName(String name1){
this.fireStationName=name1;
}
public List<FireStation> getFStations(){
//return dataManager.getFireStations();
fStations = new ArrayList<FireStation>();
fStations.add(new FireStation("001", "a1"));
fStations.add(new FireStation("002", "a2"));
fStations.add(new FireStation("003", "a3"));
return fStations;
}
public void setFStations(List<FireStation> fs){
this.fStations = fs;
}
}
答案 0 :(得分:9)
如果属性名称以两个或多个大写字符开头,那么将假定它恰好就是这种情况。 getter getFStations()
表示属性名称为FStations
,因此您应该这样访问它:
<h:dataTable value="#{vManager.FStations}" var="row">
的第8.8章中有详细说明
8.8推断名称的大写。
...
因此,当我们从现有Java名称的中间提取属性或事件名称时,我们 通常将第一个字符转换为小写字母。但是,为了支持偶尔使用所有大写字母名称,我们检查名称的前两个字符是否都是大写字母,如果是这样的话,请不要单独使用。例如,
- “FooBah”变成“fooBah”
- “Z”变为“z”
- “网址”变为“网址”
我们提供了一种实现此转换规则的方法
Introspector.decapitalize
。
请注意,属性名称是基于getter方法名称定义/解析的,而不是基于私有字段名称。
无关具体问题,但我强烈建议不要缩写属性名称。您的代码不是自我记录的方式。不要懒惰,写完全话:
<h:dataTable value="#{visitorManager.fireStations}" var="fireStation">
或者也许:
<h:dataTable value="#{visitor.fireStations}" var="fireStation">