将多个dataTable与dataScroller配合使用都会导致dataScroller故障 [英] Usage of multiple dataTables with a dataScroller each leads to dataScroller malfunction
问题描述
我有一个包含三个dataTables的JSF页面.它们每个都有一个关联的dataScroller. 查看页面时,仅最后一个dataScroller(在底部)有效.其他人仅在自己的dataScroller中选择任何页面时才加载在最后一个dataTable上选择的页面.
I have a JSF page with three dataTables. Each of them has an associated dataScroller. When viewing the page only the last dataScroller (on the bottom) works. The others only load the page selected on the last dataTable when selecting any page in their own dataScroller.
我已经用Firebug调试了页面,但没有发现任何相关内容.在这里或其他论坛中,我都没有找到任何有关如何解决此问题的线索.
I've debugged the page with Firebug and I found nothing relevant. Neither did I find any thread here or in other forums about how to solve this issue.
我还发布了一些代码,以防万一.预先感谢:
I post also some code, just in case it could be helpful. Thanks in advance:
homepage.xhtml
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jstl/core">
<ui:composition template="layouts/template.jsf">
<ui:define name="body">
<h3>#{msg.homepageCaption1}</h3>
<h:form id="form">
<div>
<rich:dataTable value="#{HomepageBean.firstTable}"
var="tOne" id="tableOne" rows="5">
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.firstColumn}" />
</f:facet>
<h:outputText value="#{tOne.firstColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.secondColumn}" />
</f:facet>
<h:outputText value="#{tOne.secondColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.thirdColumn}" />
</f:facet>
<h:outputText value="This is an String" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fourthColumn}" />
</f:facet>
<h:outputText value="#{tOne.fourthColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fifthColumn}" />
</f:facet>
<h:outputText value="#{tOne.fifthColumn}" />
</rich:column>
</rich:dataTable>
<rich:dataScroller for="tableOne"
pageIndexVar="#{HomepageBean.firstTablePage}"
ajaxSingle="false">
<f:facet name="previous">
<h:outputText value="<" />
</f:facet>
<f:facet name="next">
<h:outputText value=">" />
</f:facet>
<f:facet name="fastrewind">
<h:outputText value="<<" />
</f:facet>
<f:facet name="fastforward">
<h:outputText value=">>" />
</f:facet>
</rich:dataScroller>
</div>
<div>
<h3>#{msg.homepageCaption2}</h3>
<rich:dataTable
value="#{HomepageBean.secondTable}" var="tTwo"
id="tableTwo" rows="5">
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.firstColumn}" />
</f:facet>
<h:outputText value="#{tTwo.firstColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.secondColumn}" />
</f:facet>
<h:outputText value="#{tTwo.secondColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.thirdColumn}" />
</f:facet>
<h:outputText value="This is an string" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fourthColumn}" />
</f:facet>
<h:outputText value="#{tTwo.fourthColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fifthColumn}" />
</f:facet>
<h:outputText value="#{tTwo.fifthColumn}" />
</rich:column>
</rich:dataTable>
<rich:dataScroller for="tableTwo"
pageIndexVar="#{HomepageBean.secondTablePage}"
ajaxSingle="false">
<f:facet name="previous">
<h:outputText value="<" />
</f:facet>
<f:facet name="next">
<h:outputText value=">" />
</f:facet>
<f:facet name="fastrewind">
<h:outputText value="<<" />
</f:facet>
<f:facet name="fastforward">
<h:outputText value=">>" />
</f:facet>
</rich:dataScroller>
</div>
<div>
<h3>#{msg.homepageCaption3}</h3>
<rich:dataTable
value="#{homepageBean.thirdTable}" var="tThree"
id="tableThree" rows="5">
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.firstColumn}" />
</f:facet>
<h:outputText value="#{tThree.firstColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.secondColumn}" />
</f:facet>
<h:outputText value="#{tThree.secondColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.thirdColumn}" />
</f:facet>
<h:outputText value="This is an string" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fourthColumn}" />
</f:facet>
<h:outputText value="#{tThree.fourthColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fifthColumn}" />
</f:facet>
<h:outputText value="#{tThree.fifthColumn}" />
</rich:column>
</rich:dataTable>
<rich:dataScroller for="tableThree"
pageIndexVar="#{homepageBean.thirdTablePage}"
ajaxSingle="false">
<f:facet name="previous">
<h:outputText value="<" />
</f:facet>
<f:facet name="next">
<h:outputText value=">" />
</f:facet>
<f:facet name="fastrewind">
<h:outputText value="<<" />
</f:facet>
<f:facet name="fastforward">
<h:outputText value=">>" />
</f:facet>
</rich:dataScroller>
</div>
</h:form>
</ui:define>
</ui:composition>
</html>
homepageBean.java
package somepackage.bean;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import somepackage.service.HomepageService;
import somepackage.viewdto.ViewDTO;
@Component("HomepageBean")
@Scope("request")
public class HomepageBean {
private List<ViewDTO> firstTable;
private List<ViewDTO> secondTable;
private List<ViewDTO> thirdTable;
private int firstTablePage;
private int secondTablePage;
private int thirdTablePage;
@Autowired
private HomepageService homepageService;
public List<ViewDTO> getFirstTable() {
return firstTable;
}
public void setFirstTable(List<ViewDTO> firstTable) {
this.firstTable = firstTable;
}
public List<ViewDTO> getSecondTable() {
return secondTable;
}
public void setSecondTable(List<ViewDTO> secondTable) {
this.secondTable = secondTable;
}
public List<ViewDTO> getThirdTable() {
return thirdTable;
}
public void setThirdTable(List<ViewDTO> thirdTable) {
this.thirdTable = thirdTable;
}
public int getFirstTablePage() {
return firstTablePage;
}
public void setFirstTablePage(int firstTablePage) {
this.firstTablePage = firstTablePage;
}
public int getSecondTablePage() {
return secondTablePage;
}
public void setSecondTablePage(int secondTablePage) {
this.secondTablePage = secondTablePage;
}
public int getThirdTablePage() {
return thirdTablePage;
}
public void setThirdTablePage(int thirdTablePage) {
this.thirdTablePage = thirdTablePage;
}
public HomepageService getHomepageService() {
return homepageService;
}
public void setHomepageService(HomepageService homepageService) {
this.homepageService = homepageService;
}
}
推荐答案
已解决了将每个表嵌套在panelGrid中的问题(不知道这是否应该是严格正确的方法,但确实可行):
The issue was solved nesting each table inside a panelGrid (no idea whether this should be the strictly correct approach but it worked):
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jstl/core">
<ui:composition template="layouts/template.jsf">
<ui:define name="body">
<h3>#{msg.homepageCaption1}</h3>
<h:form id="form">
<h:panelGrid columnClasses="acent">
<rich:dataTable value="#{HomepageBean.firstTable}"
var="tOne" id="tableOne" rows="5">
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.firstColumn}" />
</f:facet>
<h:outputText value="#{tOne.firstColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.secondColumn}" />
</f:facet>
<h:outputText value="#{tOne.secondColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.thirdColumn}" />
</f:facet>
<h:outputText value="This is an String" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fourthColumn}" />
</f:facet>
<h:outputText value="#{tOne.fourthColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fifthColumn}" />
</f:facet>
<h:outputText value="#{tOne.fifthColumn}" />
</rich:column>
</rich:dataTable>
<rich:dataScroller for="tableOne"
pageIndexVar="#{HomepageBean.firstTablePage}"
ajaxSingle="false">
<f:facet name="previous">
<h:outputText value="<" />
</f:facet>
<f:facet name="next">
<h:outputText value=">" />
</f:facet>
<f:facet name="fastrewind">
<h:outputText value="<<" />
</f:facet>
<f:facet name="fastforward">
<h:outputText value=">>" />
</f:facet>
</rich:dataScroller>
</h:panelGrid>
<h:panelGrid columnClasses="acent">
<h3>#{msg.homepageCaption2}</h3>
<rich:dataTable
value="#{HomepageBean.secondTable}" var="tTwo"
id="tableTwo" rows="5">
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.firstColumn}" />
</f:facet>
<h:outputText value="#{tTwo.firstColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.secondColumn}" />
</f:facet>
<h:outputText value="#{tTwo.secondColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.thirdColumn}" />
</f:facet>
<h:outputText value="This is an string" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fourthColumn}" />
</f:facet>
<h:outputText value="#{tTwo.fourthColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fifthColumn}" />
</f:facet>
<h:outputText value="#{tTwo.fifthColumn}" />
</rich:column>
</rich:dataTable>
<rich:dataScroller for="tableTwo"
pageIndexVar="#{HomepageBean.secondTablePage}"
ajaxSingle="false">
<f:facet name="previous">
<h:outputText value="<" />
</f:facet>
<f:facet name="next">
<h:outputText value=">" />
</f:facet>
<f:facet name="fastrewind">
<h:outputText value="<<" />
</f:facet>
<f:facet name="fastforward">
<h:outputText value=">>" />
</f:facet>
</rich:dataScroller>
</h:panelGrid>
<h:panelGrid columnClasses="acent">
<h3>#{msg.homepageCaption3}</h3>
<rich:dataTable
value="#{homepageBean.thirdTable}" var="tThree"
id="tableThree" rows="5">
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.firstColumn}" />
</f:facet>
<h:outputText value="#{tThree.firstColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.secondColumn}" />
</f:facet>
<h:outputText value="#{tThree.secondColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.thirdColumn}" />
</f:facet>
<h:outputText value="This is an string" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fourthColumn}" />
</f:facet>
<h:outputText value="#{tThree.fourthColumn}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msg.fifthColumn}" />
</f:facet>
<h:outputText value="#{tThree.fifthColumn}" />
</rich:column>
</rich:dataTable>
<rich:dataScroller for="tableThree"
pageIndexVar="#{homepageBean.thirdTablePage}"
ajaxSingle="false">
<f:facet name="previous">
<h:outputText value="<" />
</f:facet>
<f:facet name="next">
<h:outputText value=">" />
</f:facet>
<f:facet name="fastrewind">
<h:outputText value="<<" />
</f:facet>
<f:facet name="fastforward">
<h:outputText value=">>" />
</f:facet>
</rich:dataScroller>
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
</html>
这篇关于将多个dataTable与dataScroller配合使用都会导致dataScroller故障的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!