Action文件:
package action;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;public class enterToGetListToGatherAction extends Action { @Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ActionErrors errors = new ActionErrors();

try{

Context ctx=new InitialContext(); 
Connection conn=null; 
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); 
conn=ds.getConnection(); String sqlStr1 = new String("select count(*) as rscount from registryInfo where registerFlag=1");
String sqlStr2 = new String("select * from registryInfo where registerFlag=1");
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sqlStr1);

if(rs.next()){
int i = 0;
Object[][] rsArray = new Object[rs.getInt("rscount")][10];
Statement stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs1 = stmt1.executeQuery(sqlStr2);
while(rs1.next()){
rsArray[i][0] = rs1.getString("registerID");
rsArray[i][1] = rs1.getString("instrID");
rsArray[i][2] = rs1.getString("instrCode");
rsArray[i][3] = rs1.getString("instrIP");
rsArray[i][4] = rs1.getString("instrPort");
rsArray[i][5] = rs1.getString("sampleRate");
rsArray[i][6] = rs1.getString("channelNum");
rsArray[i][7] = rs1.getString("itemCode");
rsArray[i][8] = rs1.getString("registerTime");
rsArray[i][9] = rs1.getString("registerFlag");
i++;
}
request.setAttribute("rsArray", rsArray);
}

rs.close();
stmt.close();
conn.close();
}catch (SQLException e) {
e.printStackTrace();
errors.add("DBError", new ActionMessage("DBError"));
}

return mapping.findForward("EnterToGather");

}}
前台JSP文件
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html:html>
<head>
<title>选择仪器查看采数状态</title>
<script type="text/javascript">
function SubmitControl(id){
alert(id);
window.location="viewDataTable.do?instrCode="+id;
}
</script>
</head>
<body bgcolor="#DCDADA">

<select name="device">
<option value="">--请选择仪器--<option>
<c:forEach items="${requestScope.rsArray}" var="record">  
   <option value="${record[0]}">${record[1]}<option>
   </c:forEach>  
   </select>
<input type="button" onclick="SubmitControl(${record[0]})" value="查看采数状态">

</body>
</html:html>我在按钮提交时无法拿到record[0]的值,改成<input type="button" onclick="SubmitControl(${requestScope.rsArray})" value="查看采数状态">请问Action中的request.SetAttribute在前台怎么取值?

解决方案 »

  1.   

    比如 在service中 request.setAttribute("Id", sId);那么在jsp中 <td bgcolor="#F4F4F4" height="30" colspan="8" align="right"><strong> ${Id}</strong></td>就可以了
      

  2.   

    在Action里面,request.setArrtibute("ErrorMessage",值)
    页面里面
    <bean:write name="ErrorMessage" scope="request" />
    就把值取出来了,建议楼主不要用el表达式和jstl标签,既然用了struts标签,那就用struts标签来做
    再说struts标签完全可以代替那些标签,html标签等
      

  3.   

        <%
         Object[][] objs = (Object[][])request.getAttribute("rsArray");
         %>之后遍历输出二维数组即可。
    但我弄不明白,你为啥要用二维数组类?? 把数据库记录风装成Pojo多好!
      

  4.   

    这个好像不行吧。用${request.getAttribute()}也要报错
      

  5.   

    用二维数组是为了在对选择框进行初始化时方便,比如
    <select name="device">
    <option value="">--请选择仪器--<option>
    <c:forEach items="${requestScope.rsArray}" var="record">
    <option value="${record[0]}">${record[1]}<option>
    </c:forEach>
    </select>
    就可以很方便的将第一个ID值装入value中,第二个name值在页面上显示,请问Pojo是怎么回事?能介绍一下吗?
      

  6.   

    我建议你写个类放更好 
    不过这样也行用:
     request.setattribute("name",string [] str);//request.setattribute("name",object)object 什么类型都行要jdk1.6支持
      

  7.   

    用EL表达式不行吗?
    ${requestScope.NAME}
      

  8.   

    如:
    String str="test";
    request.setAttribute("str", str); 在JSP页面获取
    方法1:
        <%String str = request.getAttribute("str");%>方法2,用EL表达式:
        <input type="text" value="${str}" />
      

  9.   

    用request.getAttribute("rsArray")就能得到你想要的值
      

  10.   

    Scriptlet的话直接用<%request.getAttribute("rsArray")%>
    EL 就直接用了比如<c:forEach var="arr" items=${rsArray}>
      

  11.   

    使用request.getAttribute("rsArray");
    1楼结果集为何不用list或arraylist啊