1

以下のコードを実行すると、Apache Tomcat ログに次のように表示されます。

Property 'recuClientes' not found in type com.swc.rc.recu.UtilsRecu

webPage が返されますNo records found.

なにか提案を?

これがコールです

<p:outputPanel>
    <h:form>  
        <p:dataTable var="rec" value="#{rc.recu}">  
            <p:column headerText="recu">  

                <h:outputText value="#{rec.deudor}" />  


            </p:column>  
        </p:dataTable>  
    </h:form>
</p:outputPanel>

これがソースです、使えますよね?

@XmlTransient
public Collection<Procs> getProcsCollection() {
    return procsCollection;
}

public void setProcsCollection(Collection<Procs> procsCollection) {
    this.procsCollection = procsCollection;
}

そして、これがマネージドBeanです..

@ManagedBean(name = "rc")
@SessionScoped
public class UtilsRecu {

    private Clientes cliente=new Clientes();

    private List <Procs> recu=new LinkedList<Procs>(); 



    public void recuClientes(){

        recu=(List<Procs>) cliente.getProcsCollection();

    }        

    public void setRecu(List<Procs> recu) {

        this.recu= recu;
    }

    public List<Procs> getRecu() {
        recuClientes();
        return recu;
    }


}

ありがとうございました..

4

1 に答える 1

0

あなたが直面している例外は、これまでに示した Facelets コードが原因ではありません。#{rc.recuClientes}これは、同じページ内の別の場所を誤って使用したことが原因です。おそらく、テンプレートテキストにプレーンバニラを次のように配置しました

#{rc.recuClientes}

そして、ロード時にメソッドを実行することを望んでいます。しかし、そうはいきません。これは値式として解釈されるgetRecuClientes()ため、出力に出力できる何かを返す getter メソッドを探します。しかし、そのようなゲッターメソッドは存在しないため、直面している「プロパティが見つかりません」という例外がスローされます。

このメソッドが何らかのビジネス ロジックを実行する (リストを埋める) という事実を考えると、 などのアクション コンポーネントによって呼び出される必要があります<h:commandButton>

<h:form>
    <h:commandButton value="Submit" action="#{rc.recuClientes}" />
</h:form>

または、最初の GET リクエスト中にすでに呼び出すつもりなら@PostConstruct、ビュー内のどこでも参照する必要なく、単にアノテーションを付けます。

@PostConstruct
public void recuClientes() {
    recu = (List<Procs>) cliente.getProcsCollection();
}        

このようにして、Bean の構築直後に呼び出されます。

ちなみにあのキャストはコード臭。適切に設計されたコードでは、この特定の構造でそのキャストが必要になることはありません。

于 2012-11-30T19:55:20.167 に答える