先上代码:
页面部分: <s:iterator value="dingdans" status="dingdan">
<td class=forumrow  height=24><s:property value="dingdanId" /></td>
<td class=forumrowhighlight  height=24><s:property value="dingdanShijian"/></td>
<td class=forumrow  height=24><s:property value="user.userName"/></td>
<td class=forumrowhighlight  height=24><s:property value="user.dianhua"/></td>
<td class=forumrow  height=24><s:property value="user.dizhi"/></td>
<td class=forumrowhighlight  height=24><s:property value="zongjia"/>元 </td>
<td class=forumrow  height=24><s:property value="zhuangtai"/></td>
<s:if test=" zhuangtai == '提交'">
<td class=forumrowhighlight  height=24>           
     <%-- <s:a href='updateDingdan.action?dingdanId="<s:property value="dingdanId" />"'> 处理</s:a>  --%> 
     
    <form action="updateDingdan.action">
    <input type="hidden" name="dingdanId" value="<s:property value="dingdanId" />">
    <input type="submit" value="处理">
    </form> 
</td>
</s:if>
action部分 public String updateDingdan() throws Exception {
DingdanDAO dingdanDAO=new DingdanDAO();
if(dingdanDAO.updateDingdan(dingdanId)) {
return SUCCESS;
    }else{
    return INPUT;
    }
}
dao部分 public boolean updateDingdan(int dingdanId){
boolean flag=false;
DingdanDAO dingdanDAO=new DingdanDAO();
Dingdan dingdan=dingdanDAO.getDingdanById(dingdanId);
String sql="update  dingdan set userId=?,zhuangtai=?,dingdanShijian=?,zongjia=?  where dingdanId='"+dingdan.getDingdanId()+"'";
try{
Connection conn=DBConn.getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);

pstmt.setInt(1, dingdan.getUserId());
pstmt.setString(2, "已处理");
pstmt.setDate(3, new java.sql.Date(dingdan.getDingdanShijian().getTime()));
pstmt.setInt(4, dingdan.getZongjia());

if(pstmt.executeUpdate()>0){
flag=true;
}
pstmt.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
错误为
com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:130)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetHasCurrentRow(SQLServerResultSet.java:314)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:1785)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1820)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1805)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(SQLServerResultSet.java:2041)
at edu.niit.cn.dao.DingdanDAO.getDingdanById(DingdanDAO.java:77)
at edu.niit.cn.dao.DingdanDAO.updateDingdan(DingdanDAO.java:240)
at edu.niit.cn.action.DingdanAction.updateDingdan(DingdanAction.java:135)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
…………………………
java.lang.NullPointerException
at edu.niit.cn.dao.DingdanDAO.updateDingdan(DingdanDAO.java:248)
at edu.niit.cn.action.DingdanAction.updateDingdan(DingdanAction.java:135)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
……………………

解决方案 »

  1.   

    如果页面我用上面的注释部分,
    <s:a href='updateDingdan.action?dingdanId="<s:property value="dingdanId" />"'> 处理</s:a>传递参数到action,会有
    警告: Error setting expression 'dingdanId' with value '[Ljava.lang.String;@112610d'
    ognl.MethodFailedException: Method "setDingdanId" failed for object edu.niit.cn.action.DingdanAction@fdfd91 [java.lang.NoSuchMethodException: edu.niit.cn.action.DingdanAction.setDingdanId([Ljava.lang.String;)]
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1292)
    Caused by: java.lang.NoSuchMethodException: edu.niit.cn.action.DingdanAction.setDingdanId([Ljava.lang.String;)
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1233)
    ... 67 more
    /-- Encapsulated exception ------------\
    java.lang.NoSuchMethodException: edu.niit.cn.action.DingdanAction.setDingdanId([Ljava.lang.String;)
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1233)
    at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1481)
    等错误,求大神、大虾、大师们帮帮忙啊,急用的!
      

  2.   

    空指针,debug跟一下,,貌似服务器也要重启
      

  3.   

    <input type="hidden" name="dingdanId" value="<s:property value="dingdanId" />">你这里面应该没值,改成value="%{dingdanId}"试试
      

  4.   

    debug的结果为:
    Object Property Name Property Value 
    edu.niit.cn.vo.Dingdan dingdanId 1 
    userId 0 
    zongjia 21 
    zhuangtai 提交 
    user edu.niit.cn.vo.User@7e9bed 
    dingdanShijian 2012-11-20 
    dingdanFs [edu.niit.cn.vo.DingdanF@2f0bd7, edu.niit.cn.vo.DingdanF@b25680, edu.niit.cn.vo.DingdanF@4d2125] 
    edu.niit.cn.action.DingdanAction texts null 
    errorMessages [] 
    dingdanId 0 
    dingdanByUserId success 
    dingdanById success 
    locale zh_CN 
    actionMessages [] 
    dingdans [] 
    actionErrors [] 
    errors {} 
    fieldErrors {} 
    session There is no read method for session 
    allDingdan success 
    container There is no read method for container 
    userId 0 
    request There is no read method for request 
    dingdan null 
    com.opensymphony.xwork2.DefaultTextProvider texts null 
      

  5.   

    对了,还有部分代码:
    public Dingdan getDingdanById(int dingdanId) {
    Dingdan dingdan = new Dingdan();
    List dingdanFs =new ArrayList();
    String sql = "select dingdan.dingdanId,dingdan.zhuangtai,dingdan.dingdanShijian,dingdan.zongjia," +
                 "[user].userId,[user].userName,[user].email,[user].dianhua,[user].dizhi"+
        " from dingdan,[user]" +
        "where dingdan.userId=[user].userId  and dingdan.dingdanId=? ";
    try {
    Connection connection = DBConn.getConnection();
    PreparedStatement pstmt = connection.prepareStatement(sql);
    pstmt.setInt(1, dingdanId);
    ResultSet rs = pstmt.executeQuery();
    if(rs.next()){
    User user=new User();
    DingdanFDAO dingdanFDAO=new DingdanFDAO(); 

    dingdan.setDingdanId(rs.getInt("dingdanId"));
    dingdan.setZhuangtai(rs.getString("zhuangtai"));
    dingdan.setDingdanShijian(rs.getDate("dingdanShijian"));
    dingdan.setZongjia(rs.getInt("zongjia"));
    dingdan.setDingdanFs(dingdanFDAO.getDingdanFById(rs.getInt(dingdanId)));

    user.setUserId(rs.getInt("userId"));
    user.setUserName(rs.getString("userName"));
    user.setDianhua(rs.getString("dianhua"));
    user.setEmail(rs.getString("email"));
    user.setDizhi(rs.getString("dizhi"));
    dingdan.setUser(user);
    }
    rs.close();
    pstmt.close();
    connection.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return dingdan;
    }
      

  6.   

    dingdanId类型不统一,是int还是string
      

  7.   

    我设置的是int类型,get/set方法都是int,会不会从页面传到action变为String类型了啊,那怎么解决啊 
      

  8.   

    错误提示指向的是dingdan.setDingdanId(rs.getInt("dingdanId"));这一行
      

  9.   

    Dingdan这个类里面的dingdanId是什么类型的?
      

  10.   

    <s:a href='updateDingdan.action?dingdanId="<s:property value="dingdanId" />"'> 
    这句话里dingdanid是string类型的,改成下面试试
    <s:a href='updateDingdan.action?dingdanId=<s:property value="dingdanId" />'> 
      

  11.   

    楼主请确定一下你的包含dingdan属性在这个类中的set,get方法是否没写错。仔细对照。报异常说没有这个方法。。也就是说页面dingdan的值想注值过去,但是报反射异常了。即检查dingdan是否为空的。如果它为空,后面的一些列错就可以理解了。
      

  12.   

    试了,不行,还是报错
    警告: Error setting expression 'dingdanId' with value '[Ljava.lang.String;@d6be89'
    ognl.MethodFailedException: Method "setDingdanId" failed for object edu.niit.cn.action.DingdanAction@ec2a72 [java.lang.NoSuchMethodException: edu.niit.cn.action.DingdanAction.setDingdanId([Ljava.lang.String;)]
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1292)
    at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1481)
    at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
    at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
    at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2318)
    at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:77)
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2318)
    at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
    at ognl.SimpleNode.setValue(SimpleNode.java:301)
    at ognl.Ognl.setValue(Ognl.java:737)
      

  13.   

    检查了,没写错,订单也不为空啊,信息也都显示在页面上啊,只是我通过上述方法将dingdanId传给action时就出错了
      

  14.   

    <s:a href='updateDingdan.action?dingdanId="<s:property value="dingdanId" />"'> 处理</s:a>
    这里dingdanId赋值后不是int型了,转成int类型再传给action
      

  15.   

    实在不行就定义一个int型的java变量把值赋给这个变量将这个值传给action
      

  16.   

    问题就是怎么把dingdanId的值赋给新定义的变量啊,然后在把他传给action
      

  17.   

    试下
    <td class=forumrowhighlight  height=24>  
    <% int id=Integer.valueOf(<s:property value="dingdanId" />);
    %>         
     <s:a href='updateDingdan.action?dingdanId=<%=id%>'> 处理</s:a>       
    </td>
    行不行
      

  18.   

    如果有空指针的时候,你看一下你的action里面是否对要接收的字段设置了getter()和setter()方法。
      

  19.   

    是少了if(rs.next()){   这句的原因,但现在他报: 不支持从 datetime 到 INTEGER 的转换。的错
    指向user.setUserId(rs.getInt("userId"));这一行,这有什么情况