📄 tablemodel 类别.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head>
<body>
<p>TableModel 类别</p>
<div id="PageContent">
<table cellSpacing="0" cellPadding="0" width="100%" border="0" id="table1">
<tr>
<td class="pagebody" vAlign="top">
<table style="CLEAR: both" cellSpacing="0" cellPadding="0" width="100%" border="0" id="table2">
<tr>
<td class="pagecontent" vAlign="top" width="100%">
<div class="wiki-content">
在 <span class="nobr">
<a title="Visit page outside Confluence" rel="nofollow" href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2796">
簡單的表格<sup><img class="rendericon" height="7" alt="" src="images/linkext7.gif" width="7" align="absMiddle" border="0"></sup></a></span>
中曾經提過,<h:dataTable>可以列舉以下幾種型態的資料:<ul>
<li>陣列
</li>
<li>java.util.List的實例
</li>
<li>java.sql.ResultSet的實例
</li>
<li>javax.servlet.jsp.jstl.sql.Result的實例
</li>
<li>javax.faces.model.DataModel的實例 </li>
</ul>
<p>
對於前四種型態,JSF實際上是以javax.faces.model.DataModel加以包裝,DataModel是個抽象類別,其子類別都是位於
javax.faces.model這個package下:</p>
<ul>
<li>ArrayDataModel
</li>
<li>ListDataModel
</li>
<li>ResultDataModel
</li>
<li>ResultSetDataModel
</li>
<li>ScalarDataModel </li>
</ul>
<p>
如果您想要對表格資料有更多的控制,您可以直接使用DataModel來設定表格資料,呼叫DataModel的setWrappedObject()方法可以讓您設定對應型態的資料,呼叫getWrappedObject()則可以取回資料,例如:</p>
<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<div class="codeHeader" style="BORDER-BOTTOM-STYLE: solid">
<b>TableBean.java</b></div>
<div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> onlyfun.caterpillar;
<span class="code-keyword">import</span> java.util.*;
<span class="code-keyword">import</span> javax.faces.model.DataModel;
<span class="code-keyword">import</span> javax.faces.model.ListDataModel;
<span class="code-keyword">public</span> class TableBean {
<span class="code-keyword">private</span> DataModel model;
<span class="code-keyword">private</span> <span class="code-object">int</span> rowIndex = -1;
<span class="code-keyword">public</span> DataModel getUsers() {
<span class="code-keyword">if</span>(model == <span class="code-keyword">null</span>) {
model = <span class="code-keyword">new</span> ListDataModel();
model.setWrappedData(getUserList());
}
<span class="code-keyword">return</span> model;
}
<span class="code-keyword">private</span> List getUserList() {
List userList = <span class="code-keyword">new</span> ArrayList();
userList.add(<span class="code-keyword">new</span> UserBean(<span class="code-quote">"caterpillar"</span>, <span class="code-quote">"123456"</span>));
userList.add(<span class="code-keyword">new</span> UserBean(<span class="code-quote">"momor"</span>, <span class="code-quote">"654321"</span>));
userList.add(<span class="code-keyword">new</span> UserBean(<span class="code-quote">"becky"</span>, <span class="code-quote">"7890"</span>));
<span class="code-keyword">return</span> userList;
}
<span class="code-keyword">public</span> <span class="code-object">int</span> getSelectedRowIndex() {
<span class="code-keyword">return</span> rowIndex;
}
<span class="code-keyword">public</span> <span class="code-object">String</span> select() {
rowIndex = model.getRowIndex();
<span class="code-keyword">return</span> <span class="code-quote">"success"</span>;
}
}</pre>
</div>
</div>
<p>
在這個Bean中,我們直接設定DataModel?,將userList設定給它,如您所看到的,我們還可以取得DataModel?的各個變項,在這個例子中,select()將作為點選表格之後的事件處理方法,我們可以藉由DataModel?的getRowIndex
()來取得所點選的是哪一row的資料,例如:</p>
<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<div class="codeHeader" style="BORDER-BOTTOM-STYLE: solid">
<b>index.jsp</b></div>
<div class="codeContent">
<pre class="code-java"><%@ taglib uri=<span class="code-quote">"http:<span class="code-comment">//java.sun.com/jsf/html"</span> prefix="h" %>
</span> <%@ taglib uri=<span class="code-quote">"http:<span class="code-comment">//java.sun.com/jsf/core"</span> prefix="f" %>
</span> <html>
<link href=<span class="code-quote">"styles.css"</span> rel=<span class="code-quote">"stylesheet"</span> type=<span class="code-quote">"text/css"</span>/>
<body>
<f:view>
<h:form>
<h:dataTable value=<span class="code-quote">"#{tableBean.users}"</span> <span class="code-keyword">var</span>=<span class="code-quote">"user"</span>
styleClass=<span class="code-quote">"orders"</span>
headerClass=<span class="code-quote">"ordersHeader"</span>
rowClasses=<span class="code-quote">"evenColumn,oddColumn"</span>>
<h:column>
<f:facet name=<span class="code-quote">"header"</span>>
<h:outputText value=<span class="code-quote">"Name"</span>/>
</f:facet>
<h:commandLink action=<span class="code-quote">"#{tableBean.select}"</span>>
<h:outputText value=<span class="code-quote">"#{user.name}"</span>/>
</h:commandLink>
<f:facet name=<span class="code-quote">"footer"</span>>
<h:outputText value=<span class="code-quote">"****"</span>/>
</f:facet>
</h:column>
<h:column>
<f:facet name=<span class="code-quote">"header"</span>>
<h:outputText value=<span class="code-quote">"Password"</span>/>
</f:facet>
<h:outputText value=<span class="code-quote">"#{user.password}"</span>/>
<f:facet name=<span class="code-quote">"footer"</span>>
<h:outputText value=<span class="code-quote">"****"</span>/>
</f:facet>
</h:column>
</h:dataTable>
</h:form>
Selected Row: <h:outputText
value=<span class="code-quote">"#{tableBean.selectedRowIndex}"</span>/>
</f:view>
</body>
</html></pre>
</div>
</div>
<p> DataModel的rowIndex是從0開始計算,當處理ActionEvent時,JSF會逐次遞增rowIndex的值,這讓您可以得知目前正在處理的是哪一個row的資料,一個執行的圖示如下:</p>
<p>
<img src="images/tableModel-1.jpg" align="middle" border="0"></div>
<!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><rdf:Description rdf:about="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2806" dc:identifier="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2806" dc:title="TableModel 類別" trackback:ping="http://www.javaworld.com.tw/confluence/rpc/trackback/2806"/></rdf:RDF>--><!-- Root decorator: all decisions about how a page is to be decorated via the inline decoration begins here.--><!-- Switch based upon the context. However, for now, just delegate to a decorator identified directly by the context.--></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -