如何使用具有不同dataTable值的1个JSF页面(2个托管的_bean)
我有个问题。 我有两个托管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页面中使用如何使用具有不同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的值。怎么做?现在我有
<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"/>
<!-- this is used for pagination-->
<h:commandLink action="#{bean1.previous}"
value="#Previous #{bean1.pagination.pageSize}"
rendered="#{bean1.pagination.hasPreviousPage}"
style="font-size: medium"/>
<!-- this is used for pagination-->
<h:commandLink action="#{bean1.next}"
value="next #{bean1.pagination.pageSize}"
rendered="#{bean1.pagination.hasNextPage}"
style="font-size: medium"/>
<!-- 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"/>
<!-- this is used for pagination-->
<h:commandLink action="#{bean2.previous}"
value="#Previous #{bean2.pagination.pageSize}"
rendered="#{bean2.pagination.hasPreviousPage}"
style="font-size: medium"/>
<!-- this is used for pagination-->
<h:commandLink action="#{bean2.next}"
value="next #{bean2.pagination.pageSize}"
rendered="#{bean2.pagination.hasNextPage}"
style="font-size: medium"/>
<!-- 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>