如何使用具有不同dataTable值的1个JSF页面(2个托管的_bean)

如何使用具有不同dataTable值的1个JSF页面(2个托管的_bean),jsf,datatable,Jsf,Datatable,我有个问题。 我有两个托管bean:bean1和bean2: -bean1实现了DataModelAddedads,我在其中按用户添加了广告 -bean2实现了DataModelChooseADS,其中我让用户选择ads 你可以看到bean1和bean2有相同的变量,但值不同,因为bean1有ads,bean2有ads,但值不同。我想做的是,我只想使用1个JSF页面来显示dataTable中的值,但有时我需要在dataTable中显示bean1的值,有时我需要显示bean2的值。怎么做?现在我有

我有个问题。 我有两个托管bean:bean1和bean2:

-bean1实现了DataModelAddedads,我在其中按用户添加了广告

-bean2实现了DataModelChooseADS,其中我让用户选择ads

你可以看到bean1和bean2有相同的变量,但值不同,因为bean1有ads,bean2有ads,但值不同。我想做的是,我只想使用1个JSF页面来显示dataTable中的值,但有时我需要在dataTable中显示bean1的值,有时我需要显示bean2的值。怎么做?现在我有两个JSF页面,一个用于bean1,另一个用于bean2,但这是相同的JSF页面,所以使用两个相同的JSF页面并不好。如何在1 JSF页面中完成,但在需要时使用不同的值?现在我在JSF页面中使用

<h:dataTable value=#{bean1.addedADS}


就是这样。正如您可以看到的,JSF第1页和第2页是相同的,在表中有相同的列,但使用不同的数据模型。我需要做的是只使用1个JSF页面。当有人点击菜单“Ads choosen by user”(就像我在template.xhtml中显示菜单)时,我想在那1个页面上显示来自bean1的JSF值,当有人点击菜单“Ads added by user”时,我想在相同的JSF页面上显示来自bean2的值。不像现在我有2个JSF页面。这就是我的问题。我从Java EE开始,可能很简单,但我有问题。

do
addedADS
ChooseAds
类从同一个类扩展而来,它们是同一个类还是完全不同的类?addedADS和ChooseAds的值与类TAds的值相同,但ChooseAds的值取自TChoosen,后者是TAds的参考。因此类TAD具有:-长id-字符串标题-字符串信息-TUsers用户;-这是对创建该广告的用户的引用,因此我可以将其用于1个用户的搜索广告。和TChoosen类有:-长id-TAds ad;-这是一些用户添加的广告(此信息以TAds格式显示)-TUsers用户;-这是对选择广告的用户的引用
<h:dataTable value=#{bean2.choosenADS} 
         <div>
            <div id="left">
                <ul>
                        <li><a><span><h:link outcome="#{bean1.downloadChoosen()}" value="Ads choosen by user"/></span></a></li>
                        <li><a><span><h:link outcome="#{bean2.downloadAdded()}" value="Ads added by user"/></span></a></li>

                </ul>
            </div>
            <div id="content" class="left_content">
                <ui:insert name="content"></ui:insert>
            </div>
        </div>
@ManagedBean
@SessionScoped
public class bean1 {
    @EJB
    private Fasade fasade;

    private List<TChoosen> choosen=new ArrayList(); 
    private DataModel choosenData;
    private PaginationHelper pagination;

//here i download date and get list of objects
    public String downloadChoosen(){
        choosen=fasade.downloadChoosen();
        return "/faces/list_of_choosen_ads";
    }

//this method is started from JSF page list_of_choosen_ads
    public DataModel getChoosenData(){
        if(choosenData==null){
            choosenData=getPagination().createPageDataModel();
        }
        return choosenData;
    }

    public void setChoosenData(DataModel choosenData) {
        this.choosenData = choosenData;
    }

//this method is used for pagination and it's started from getChoosenData()
    public PaginationHelper getPagination(){
        if(pagination==null){
            pagination=new PaginationHelper(5){//5 its number of ads for 1pagination site


                @Override
                public int getItemsCount(){

                    return choosen.size();
                }

                @Override
                public DataModel createPageDataModel(){
                    int[] range={getPageFirstItem(),getPageLastItem()+1};
                    return new ListDataModel(findRange(range));

                }

            };
        }
        return pagination;
    }

//this method is used from getPagination() 
//ads_dto is my class used for data transfer object (just getters and setters)
    public ArrayList<ads_dto> findRange(int[] range){
        ArrayList<ads_dto> pom=new ArrayList();
        for(int i=range[0];i<range[1];i++){
            pom.add(ad_transform(choosen.get(i)));
        }
        return pom;
    }

    //this method is used by findRange() and its return dto object 
    //then in findRange() is created a list of dto objects
    public ads_dto ad_transform(TChoosen ch){
        ads_dto pom=new ads_dto();

        pom.setIdA(ch.getAdChoosen().getId());
        pom.setTitle(ch.getAdChoosen().getTitle());
        pom.setInformation(ch.getAdChoosen().getInformation());

        return pom;
    }

    private void recreateModel(){
        choosen=null;
    }

    //this is used for pagination        
    public String next(){
        getPagination().nextPage();
        recreateModel();
        return "/faces/list_of_choosen_ads";
    }
     //this is used for pagination     
    public String previous(){
        getPagination().previousPage();
        recreateModel();
        return "/faces/list_of_choosen_ads";
    }


    //and here just getters and setters where i input in JSF page values or get it 

    //id of ad
    public Long getIdA(){
        return ads_dto.getIdA();
    }

    public void setIdA(Long idA){
        this.ads_dto.setIdA(idA);
    }

    //title of ad
    public String getTitle() {
        return ads_dto.getTitle();
    }

    public void setTitle(String title) {
        this.ads_dto.setTitle(title);
    }

    //information of ad
    public String getInfromation(){
         return ads_dto.getInformation();
    }

    public void setInformation(String information){
         this.ads_dto.setInformation(information);
    }
}
    @ManagedBean
    @SessionScoped
    public class bean2 {
        @EJB
        private Fasade fasade;

        private List<TAds> added=new ArrayList(); 
        private DataModel addedData;
        private PaginationHelper pagination;

    //here i download date and get list of objects
        public String downloadAdded(){
            added=fasade.downloadAdded();
            return "/faces/list_of_added_ads";
        }

    //this method is started from JSF page list_of_added_ads
        public DataModel getAddedData(){
            if(addedData==null){
                addedData=getPagination().createPageDataModel();
            }
            return addedData;
        }

        public void setAddedData(DataModel addedData) {
            this.addedData = addedData;
        }

    //this method is used for pagination and it's started from getChoosenData()
        public PaginationHelper getPagination(){
            if(pagination==null){
                pagination=new PaginationHelper(5){//5 its number of ads for 1pagination site


                    @Override
                    public int getItemsCount(){

                        return added.size();
                    }

                    @Override
                    public DataModel createPageDataModel(){
                        int[] range={getPageFirstItem(),getPageLastItem()+1};
                        return new ListDataModel(findRange(range));

                    }

                };
            }
            return pagination;
        }

    //this method is used from getPagination() 
    //ads_dto is my class used for data transfer object (just getters and setters)
        public ArrayList<ads_dto> findRange(int[] range){
            ArrayList<ads_dto> pom=new ArrayList();
            for(int i=range[0];i<range[1];i++){
                pom.add(ad_transform(added.get(i)));
            }
            return pom;
        }

        //this method is used by findRange() and its return dto object 
        //then in findRange() is created a list of dto objects
        public ads_dto ad_transform(TAds a){
            ads_dto pom=new ads_dto();

            pom.setIdA(a.getId());
            pom.setTitle(a.getTitle());
            pom.setInformation(a.getInformation());

            return pom;
        }

        private void recreateModel(){
            added=null;
        }

        //this is used for pagination        
        public String next(){
            getPagination().nextPage();
            recreateModel();
            return "/faces/list_of_added_ads";
        }
         //this is used for pagination     
        public String previous(){
            getPagination().previousPage();
            recreateModel();
            return "/faces/list_of_added_ads";
        }


        //and here just getters and setters where i input in JSF page values or get it 

        //id of ad
        public Long getIdA(){
            return ads_dto.getIdA();
        }

        public void setIdA(Long idA){
            this.ads_dto.setIdA(idA);
        }

        //title of ad
        public String getTitle() {
            return ads_dto.getTitle();
        }

        public void setTitle(String title) {
            this.ads_dto.setTitle(title);
        }

        //information of ad
        public String getInfromation(){
             return ads_dto.getInformation();
        }

        public void setInformation(String information){
             this.ads_dto.setInformation(information);
        }
    }
<!-- here i use my template -->
<ui:composition template="./template.xhtml">
  <ui:define name="content">
    <h:form>
      <!-- here i show table when there is some data to show-->
      <h:panelGroup rendered="#{bean1.pagination.itemsCount>0}">
        <!-- this is used for pagination-->
        <h:outputText value="#{bean1.pagination.pageFirstItem + 1}
                                      ..#{bean1.pagination.pageLastItem + 1}
                                      /#{bean1.pagination.itemsCount}"
                                      style="font-size: medium"/>&nbsp;
        <!-- this is used for pagination-->
        <h:commandLink action="#{bean1.previous}" 
                        value="#Previous #{bean1.pagination.pageSize}" 
                                rendered="#{bean1.pagination.hasPreviousPage}"
                                style="font-size: medium"/>&nbsp;
        <!-- this is used for pagination-->
        <h:commandLink action="#{bean1.next}" 
                                value="next #{bean1.pagination.pageSize}" 
                                rendered="#{bean1.pagination.hasNextPage}"
                                style="font-size: medium"/>&nbsp;

        <!-- here is my table where i use my dataModel choosenData and i show in table columns idA, Title, Information-->
        <h:dataTable value="#{bean1.choosenData}" 
                                     var="item" border="0"
                                     cellpadding="2" cellspacing="0"
                                     rowClasses="jsfcrud_odd_row,jsfcrud_even_row"
                                     rules="all" style="border:solid 1px">

            <h:column>
               <f:facet name="header">
                   <h:outputText value="idA"/>
               </f:facet>
               <h:outputText value="#{item.idA}"/>
            </h:column>
            <h:column>
               <f:facet name="header">
                   <h:outputText value="Title"/>
               </f:facet>
               <h:outputText value="#{item.title}"/>
            </h:column>
            <h:column>
               <f:facet name="header">
                   <h:outputText value="Information"/>
               </f:facet>
               <h:outputText value="#{item.Information}"/>
            </h:column>
        </h:dataTable>
      </h:panelGroup>
    </h:form>
  </ui:define>
</ui:composition>
<!-- here i use my template -->
<ui:composition template="./template.xhtml">
  <ui:define name="content">
    <h:form>
      <!-- here i show table when there is some data to show-->
      <h:panelGroup rendered="#{bean2.pagination.itemsCount>0}">
        <!-- this is used for pagination-->
        <h:outputText value="#{bean2.pagination.pageFirstItem + 1}
                                      ..#{bean2.pagination.pageLastItem + 1}
                                      /#{bean2.pagination.itemsCount}"
                                      style="font-size: medium"/>&nbsp;
        <!-- this is used for pagination-->
        <h:commandLink action="#{bean2.previous}" 
                        value="#Previous #{bean2.pagination.pageSize}" 
                                rendered="#{bean2.pagination.hasPreviousPage}"
                                style="font-size: medium"/>&nbsp;
        <!-- this is used for pagination-->
        <h:commandLink action="#{bean2.next}" 
                                value="next #{bean2.pagination.pageSize}" 
                                rendered="#{bean2.pagination.hasNextPage}"
                                style="font-size: medium"/>&nbsp;

        <!-- here is my table where i use my dataModel addedData and i show in table columns idA, Title, Information-->
        <h:dataTable value="#{bean2.addedData}" 
                                     var="item" border="0"
                                     cellpadding="2" cellspacing="0"
                                     rowClasses="jsfcrud_odd_row,jsfcrud_even_row"
                                     rules="all" style="border:solid 1px">

            <h:column>
               <f:facet name="header">
                   <h:outputText value="idA"/>
               </f:facet>
               <h:outputText value="#{item.idA}"/>
            </h:column>
            <h:column>
               <f:facet name="header">
                   <h:outputText value="Title"/>
               </f:facet>
               <h:outputText value="#{item.title}"/>
            </h:column>
            <h:column>
               <f:facet name="header">
                   <h:outputText value="Information"/>
               </f:facet>
               <h:outputText value="#{item.Information}"/>
            </h:column>
        </h:dataTable>
      </h:panelGroup>
    </h:form>
  </ui:define>
</ui:composition>