0

Edit2-投稿の最後にfaces-config.xmlを追加しました。

Primefacesのデータテーブル行の選択に問題があります。行を選択して、データをオブジェクトに移動し、それを操作できるようにしたいと考えています。Primefacesのショーケースの例に基づいたモデルを使用していますが、機能しません。率直に言って、私は何が悪いのかについての考えを使い果たしています。以下は私のxhtmlとmanagedbeanです。

<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui" >
<h:head>

</h:head>
<h:body>
<center>
<h:form id="form">

<p:dataTable id="personTable" var="client" value="#{tableBean.persons}" rowKey="#{client.name}"
             selection="#{tableBean.person}" selectionMode="single">

    <f:facet name="header">
        Click "View" button after selecting a row to see details
    </f:facet>

    <p:column headerText="Name">
        #{client.name}
    </p:column>

    <p:column headerText="Address">
        #{client.address}
    </p:column>

    <p:column headerText="Phone" >
        #{client.phone}
    </p:column>
</p:dataTable>

<h:panelGrid id="display" columns="2" cellpadding="4">


        <h:outputText value="Name:" />
        <h:outputText value="#{tableBean.person.name}" />

        <h:outputText value="Address:" />
        <h:outputText value="#{tableBean.person.address}" />

        <h:outputText value="Phone:" />
        <h:outputText value="#{tableBean.person.phone}" />

</h:panelGrid>

</h:form>

</center>
</h:body>
</html>

ここでマネージドBean:

package com.dave.test;

import java.util.ArrayList;
import java.util.List;

public class TableBean {

private List<Person> persons = null;
private Person person;

public TableBean() {
    persons = new ArrayList<Person>();
    persons.add(new Person("Jimmy", "18 Maple", "337-278-1019"));
    persons.add(new Person("Sally", "47 Oak", "787-509-3819"));
    persons.add(new Person("Roger", "754 Fifth Ave.", "926-420-8219"));
    persons.add(new Person("Mimi", "891 2nd St.", "713-371-8632"));

}

public List<Person> getPersons() {
    return persons;
}

public void setPersons(List<Person> persons) {
    this.persons = persons;
}

public Person getPerson() {
    return person;
}

public void setPerson(Person person) {
    this.person = person;
}


}

ありがとう、デイブ

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-    
 facesconfig_2_0.xsd">
 <managed-bean>
   <managed-bean-name>tableBean</managed-bean-name>
   <managed-bean-class>com.dave.test.TableBean</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
</faces-config>
4

2 に答える 2

0

行をクリックすると、データがないと想定しています。これは、リクエスト スコープの Bean を使用しているためです。これは、ページをロードすると、Bean が移入されることを意味します。ページが読み込まれると、Bean はなくなります。

スコープを ViewScope に変更して、それがまったく役立つかどうかを確認することをお勧めします。

また、jsf 2.0 を使用している場合は、faces-config.xml ファイルの代わりに注釈を使用できます。バッカーは次のようになります。

package com.dave.test;

import java.util.ArrayList;
import java.util.List;

public class TableBean {

private List<Person> persons = null;
private Person person;

@ManagedBean
@ViewScoped
public TableBean() {
    persons = new ArrayList<Person>();
    persons.add(new Person("Jimmy", "18 Maple", "337-278-1019"));
    persons.add(new Person("Sally", "47 Oak", "787-509-3819"));
    persons.add(new Person("Roger", "754 Fifth Ave.", "926-420-8219"));
    persons.add(new Person("Mimi", "891 2nd St.", "713-371-8632"));

}

public List<Person> getPersons() {
    return persons;
}

public void setPersons(List<Person> persons) {
    this.persons = persons;
}

public Person getPerson() {
    return person;
}

public void setPerson(Person person) {
    this.person = person;
}


}

これで、faces-config.xml からマネージド Bean を削除できます。

EDIT 行の選択を処理するためのajaxイベントがないことに気付きました。primefaces のインスタント行選択を見ている場合は、<p:ajax event="rowSelect" ..../>これを処理するためにバッキング Bean のメソッドと共に使用していることに注意する必要があります。

于 2012-07-31T14:41:53.370 に答える
0

Lo unico que debes hacer es al bean TableBean.java quitarle(borrar) el @SessionScoped ya la clase Car.java quitarle @ManagedBean(name = "car") 、 @SessionScoped は Serializable を実装します。esta clase es una simple clase no tieene porque ser un managebean unicamente son datos.

翻訳:

あなたがしなければならないのは、@SessionScoped の TableBean.java Bean を取得 (削除) し、Car.java クラス @ManagedBean (name = "car")、@SessionScoped を取り、Serializable を実装することです。このクラスは単純なクラスであり、managebean である必要はなく、データのみです。

于 2012-12-29T02:00:52.600 に答える