我在数据库中有一个表,用于存储应用程序配置数据。
这是表结构 - 这是一个非常简单的例子:
SessionTTL MaxActiveUsers
---------------------- ----------------------
30 787
我想以这种方式显示表格数据:
<table border="1">
<tr>
<td>SessionTTL</td>
<td>30</td>
</tr>
<tr>
<td>MaxActiveUsers</td>
<td>787</td>
</tr>
<tr>
<td>option</td>
<td>value</td>
</tr>
<tr>
<td>option</td>
<td>value</td>
</tr>
</table>
我尝试使用这个JSF代码和这个Java代码显示数据,但结果不是我想要的:
<h:dataTable id="books"
columnClasses="list-column-center,
list-column-right, list-column-center,
list-column-right" headerClass="list-header"
rowClasses="list-row" styleClass="list-
background" value="#{DashboardController.getDashboardList()}" var="store">
<h:column>
<h:outputText value="Session Timeout"/>
<h:outputText value="Maximum Logged Users"/>
</h:column>
<h:column>
<h:outputText value="#{store.sessionTTL} minutes"/>
<h:outputText value="#{store.maxActiveUsers}"/>
</h:column>
</h:dataTable>
public List<Dashboard> getDashboardList()throws SQLException{
List<Dashboard> list = new ArrayList<Dashboard>();
if(ds == null) {
throw new SQLException("Can't get data source");
}
Connection conn = ds.getConnection();
if(conn == null) {
throw new SQLException("Can't get database connection");
}
PreparedStatement ps = conn.prepareStatement("SELECT * from GLOBALSETTINGS");
try{
//get data from database
ResultSet result = ps.executeQuery();
while (result.next()){
Dashboard cust = new Dashboard();
cust.setSessionTTL(result.getString("SessionTTL"));
cust.setMaxActiveUsers(result.getString("MaxActiveUsers"));
list.add(cust);
}
}
catch(Exception e1){
// Log the exception.
}
finally{
try{
ps.close();
conn.close();
}
catch(Exception e2){
// Log the exception.
}
}
return list;
}
我如何以我想要的方式显示数据?
祝福
答案 0 :(得分:4)
您不能使用括号指定get方法。您必须使用托管bean中的List属性。
value="#{DashboardController.getDashboardList()}" //WRONG!
您的托管bean应如下所示:
public class DashboardController {
private List<Dashboard> lstDashboard;
public DashboardController() {
try {
lstDashboard = getDashboardList();
} catch (Exception e) {
//log the exception or something else...
}
}
//getter and setter...
public List<Dashboard> getLstDashboard() {
return this.lstDashboard;
}
public void setLstDashboard(List<Dashboard> lstDashboard) {
this.lstDashboard = lstDashboard;
}
//your other methods here...
}
其次,您设置表中每列的设计,而不是行的设计。您正在设置1列,其中包含2个值,另一列包含实际输出。
修复数据表代码:
<h:dataTable id="books"
columnClasses="list-column-center,
list-column-right, list-column-center,
list-column-right" headerClass="list-header"
rowClasses="list-row"
styleClass="list-background"
value="#{DashboardController.lstDashboard}"
var="store">
<h:column>
<f:facet name="header">
<h:outputText value="Session Timeout" />
</f:facet>
<h:outputText value="#{store.sessionTTL} minutes"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="MaxActiveUsers" />
</f:facet>
<h:outputText value="#{store.maxActiveUsers}"/>
</h:column>
</h:dataTable>
@BalusC是StackOverflow JSF专家。他有一个关于在blog entry中使用JSF DataTable的非常好的例子。
答案 1 :(得分:2)
除了我之前提到过的一些设计缺陷,至少你必须为dataTable使用正确的value
属性。
替换:
value="#{DashboardController.getDashboardList()}"
使用:
value="#{DashboardController.dashboardList}"
将自动添加“get”前缀。括号可以省略。
答案 2 :(得分:0)
getDataList()你可以写一些普通的getter方法。您编写了一些方法dataList()并在该方法中实现您的业务代码。
jsf中的dataTable中的xhtml或jsp文件中的方法声明。
<h:dataTable id="books" type="submit" value="#{DashboardController.dataList}" var="dashbord">
<h: column name="ID">
<f:facet name="header">
<h:outputText value="#{dashbord.id}"/>
</f:facet>
</h:column>
...your another columns...
</h:dataTable>