在Javaworld也貼了一份 http://www.javaworld.com.tw/jute/post/view?bid=6&id=9675&tpg=1&ppg=1&sty...
有個需求是要在畫面上顯示類似 grid 的畫面, user 可以同時改很多欄位,
然後一次存檔. 我使用的方法如下, 供大家參考.
本來是想都用 JSTL 來實作, 後來在傳回值的地方碰到一些困難
(可參考 http://www.javaworld.com.tw/jute/post/view?bid=6&id=4653&sty=1&tpg=1&age=0)
所以就直接用 JSP 寫了.
FORM 的部分如下:
<c:set var="noOfRows" value="10" />
<sql:query var="queryResults" dataSource="jdbc/myDataSource"
startRow="${param.start}" maxRows="${noOfRows}">
select *
from <c:out value="${initParam.my_table}"/>
where name like ?
<sql:param value="${param.name}"/>
</sql:query>
<form name="modify_stage" method="post" action="my.jsp">
<c:set var="i" value="1" />
<c:forEach var="row" items="${queryResults.rows}">
<tr>
<td align="center">
<input type="hidden" name="yield[<c:out value="${i}"/>][1]" value="<c:out value="${row.name}"/>" size="5" maxlength="5">
<input type="text" name="yield[<c:out value="${i}"/>][2]" value="<c:out value="${row.phone}"/>" size="5" maxlength="5">
</td>
<td><c:out value="${row.update_dt}"/></td>
<td align="center">
</tr>
<c:set var="i" value="${i+1}" />
</c:forEach>
<tr><td colspan="3">
<hr>
<input type="Submit" name="action" value="SAVE" />
<input type="Reset" name="action" value="RESET" /></td>
</td></tr>
<input type="hidden" name="cnt" value="<c:out value="${i-1}" />" />
</form>
後續處理的 JSP 如下:
<%
Context ctx = new InitialContext ( );
DataSource dataSource = (DataSource) ctx.lookup ( "dsMydb" );
Connection connection = dataSource.getConnection ( );
Statement statement = connection.createStatement ( );
String table_name = new String(application.getInitParameter("my_table"));
String[][] yield = new String[10][10];
for(int i = 1; i < 5; ++i) {
for(int j = 1; j < 3; ++j) {
yield[i][j] = request.getParameter("yield["+i+"]["+j+"]");
out.print(i + ", " + j + ", " + yield[i][j] + "<br/>");
}
statement.execute( "update " + table_name + " set yield=" + yield[i][2] + " where name = '" + yield[i][1] + "'" );
}
connection.close ( );
%>