5

JSF エラー:/fstation/search.jspx(24,62) '#{vManager.fStations}' Property 'fStations' not found on type vm.beans.VisitorManagertype

vManager は私の管理対象です:


検索.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;
    }
}
4

1 に答える 1

9

プロパティ名が 2 つ以上の大文字で始まる場合、大文字と小文字がまったく同じであると見なされます。gettergetFStations()は のプロパティ名を示すFStationsため、次のようにアクセスする必要があります。

<h:dataTable value="#{vManager.FStations}" var="row">

これは、JavaBeans 仕様の 8.8 章で指定されています。

8.8 推測された名前の大文字化。

...

したがって、既存の Java 名の途中からプロパティまたはイベント名を抽出する場合、通常は最初の文字を小文字に変換します。ただし、すべて大文字の名前を時折使用できるようにするため、名前の最初の 2 文字が両方とも大文字かどうかを確認し、大文字の場合はそのままにしておきます。たとえば、

  • 「FooBah」は「fooBah」になります</li>
  • 「Z」は「z」になります</li>
  • 「URL」は「URL」になります</li>

Introspector.decapitalizeこの変換規則を実装するメソッドを提供します。

プロパティ名は、プライベート フィールド名ではなく、getter メソッド名に基づいて定義/解決されることに注意してください。


具体的な問題とは関係ありませんが、プロパティ名をそのように省略しないことを強くお勧めします。あなたのコードはこのように自己文書化されていません。怠惰にならず、言葉をいっぱいに書いてください。

<h:dataTable value="#{visitorManager.fireStations}" var="fireStation">

または多分:

<h:dataTable value="#{visitor.fireStations}" var="fireStation">
于 2012-12-17T11:11:34.870 に答える