1

JSF ページと (おそらく) バッキング Bean に問題があります。私は独自のテンプレートを持っていて、いくつかのページでコンテンツ領域を埋めています。コマンドボタンのある検索ページがあり、データベース (JPA) からデータを取得して、データテーブルに入力したいと考えています。私のsearchpeople.xhtmlを見てください:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="template.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core">

    <ui:define name="content">
        <h:form id="sampleform">  
            <p:accordionPanel activeIndex="-1" id="accordingpanle">  
                <p:tab title="User options" >   
                    <p:growl id="growl" showDetail="true" showSummary="true"/> 
                    <p:commandButton id="searchbutton" action="#{mb_person.search}" value="Szukaj" update="personsearchresulttable" />
                </p:tab>
            </p:accordionPanel>

            <p:dataTable id="personsearchresulttable" var="person" value="#{mb_person.people}" widgetVar="personTable" style="margin-top: 10px" >  
                <p:column headerText="Id" style="width:10%">
                    <h:outputText value="#{person.id}" />  
                </p:column>
                <p:column headerText="Name" style="width:20%">  
                    <h:outputText value="#{person.name}" />  
                </p:column>  
                <p:column headerText="Surname" style="width:20%">  
                    <h:outputText value="#{person.surname}" />  
                </p:column>  
                <p:column headerText="Company">  
                    <h:outputText value="#{person.companyName}" />  
                </p:column> 
                <p:column style="width:4%" headerText="Open">  
                    <h:link outcome="persondetails" value="Open">
                        <!--<f:param name="personid" value="#{person.id}"/>-->
                        <f:param name="personid" value="10076"/>
                    </h:link>
                </p:column>  
            </p:dataTable>  
        </h:form>  
    </ui:define>
</ui:composition>

そして、EJB インジェクションを使用したバッキングビーン。

@ManagedBean(name="mb_person")
public class MB_Person implements Serializable{

    @EJB
    private PersonFacade personFacade;
    private List<PersonAndCompany> people = new ArrayList<PersonAndCompany>();

    public MB_Person() {
    }

    public List<PersonAndCompany> getPeople() {
        return people;
    }

    public void setPeople(List<PersonAndCompany> people) {
        this.people = people;
    }

    public void search() {
        int[] range = {0,5};
        setPeople(personFacade.findPersonWithMoreThanXProjects(20));
        setPeople(personFacade.findPersonAndCompanyName(range));

        for(PersonAndCompany p:people){
            System.out.println(p.getName());
        }
    }
    public String goToPersonDatailPage(int id){
        return "persondetails.jsf?personid="+id;
    }
}

メソッド検索で小さなテストとすべてのデータの印刷を試みたところ、良い結果が得られました。誰かがajaxを使用してdataTableを更新する方法を手伝ってくれますか? このフォームでは 、「sampleform:accordingpanle:searchbutton」から参照された識別子「personsearchresulttable」を持つコンポーネントが見つかりませんという例外があります。

4

1 に答える 1

2

相対クライアントIDは、親NamingContainerコンポーネントを基準にして検索されます。それ<p:accordionPanel>自体はNamingContainerです。したがって、相対クライアントIDpersonsearchresulttableはのコンテキスト内で検索されます<p:accordionPanel>。ただし、実際にはパネルの外側、内側にあり<h:form>ます。

相対クライアントIDを絶対クライアントIDに変更する必要があります。

update=":sampleform:personsearchresulttable"

参照:

于 2012-11-23T15:13:38.547 に答える