Struts2.0 表单中用到select标签提交时出错

来源:互联网 发布:2015年交通事故数据 编辑:程序博客网 时间:2024/05/17 15:22
在表单用中到了select标签,页面初始化时一切正常,select也正常初始化
可是当我提交时就出现如下错误:
严重: Servlet.service() for servlet jsp threw exception
tag 'select', field 'list', name 'functions.typeId': The requested list key '%{types}' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]

在应用中我用到两个Action,两个jsp页面

一个FunctionsAction,一个FunctionstypeAction
一个add_function.jsp,一个add_functions_success.jsp

具休流程是我从FunctionstypeAction中获取一个functionstypes的List
用来初始化add_function.jsp中的select标签,
然后把表单提交给FunctionsAction中的insert方法
add_function.jsp初始化是正常的,
但是点提交到FunctionsAction的时候页面空白
我看了一下源文件,页面只执行了一部分,
代码如下:
Java代码 复制代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  2. <html xmlns="http://www.w3.org/1999/xhtml">   
  3.     <head>   
  4.         <title>首页</title>   
  5.         <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />   
  6.     </head>   
  7.     <body style="text-align:center;">   
  8.            
  9.            
  10.            
  11.                        
  12. <form id="insertFunction" onsubmit="return true;" action="insertFunction.action" method="post">   
  13. <table class="wwFormTable">  


下面列出Action,xml配置和jsp页面的代码

FunctionsAction:
Java代码 复制代码
  1. package com.mp.job.baseinfo.action;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.mp.job.baseinfo.service.IFunctionsService;   
  6. import com.mp.job.baseinfo.vo.Functions;   
  7. import com.mp.job.common.service.JobActionSupport;   
  8. import com.mp.job.exception.BaseException;   
  9. import com.mp.job.util.Pager;   
  10.   
  11. @SuppressWarnings("serial")   
  12. public class FunctionsAction extends JobActionSupport {   
  13.     private IFunctionsService functionsService;   
  14.     private Functions functions;   
  15.     private List functionsRecords;   
  16.     @SuppressWarnings("unused")   
  17.     private Object[][] params;   
  18.     private Pager pager;   
  19.   
  20.          <!-- getter和setter这里省略! -->   
  21.        
  22.     public String insert()throws BaseException{   
  23.         try{   
  24.         functionsService.save(functions);   
  25.         }catch(Exception e){   
  26.             e.toString();   
  27.             addActionMessage("插入数据时出现异常!");   
  28.             return INPUT;   
  29.         }   
  30.         return SUCCESS;   
  31.     }   
  32.     <!-- 其他的方法省略 -->   
  33.            
  34. }  


FunctionstypeAction:
Java代码 复制代码
  1. package com.mp.job.baseinfo.action;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.mp.job.baseinfo.service.IFunctionstypeService;   
  6. import com.mp.job.baseinfo.vo.Functionstype;   
  7. import com.mp.job.common.service.JobActionSupport;   
  8. import com.mp.job.exception.BaseException;   
  9. import com.mp.job.util.Pager;   
  10.   
  11. @SuppressWarnings("serial")   
  12. public class FunctionstypeAction extends JobActionSupport {   
  13.     private IFunctionstypeService functionstypeService;   
  14.     private Functionstype functionstype;   
  15.     private List functionstypes;   
  16.     private List functionstypeRecords;   
  17.        
  18.     @SuppressWarnings("unused")   
  19.     private Object[][] params;   
  20.     private Pager pager;   
  21.   
  22.     <!-- getter和setter这里省略! -->   
  23.        
  24.     @SuppressWarnings("unchecked")   
  25.     public String getAllFunctionstypes()throws BaseException{   
  26.             functionstypes = functionstypeService.findAll();   
  27.             return null;   
  28.     }   
  29.            
  30.     <!-- 其他方法这里省略! -->   
  31.   
  32.     public List getFunctionstypes() {   
  33.         return functionstypes;   
  34.     }   
  35.   
  36.     public void setFunctionstypes(List functionstypes) {   
  37.         this.functionstypes = functionstypes;   
  38.     }   
  39.        
  40. }  


struts.xml  --->>>其中用到的Action我都在Spring中配置过了
Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2.   
  3. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">   
  4. <struts>   
  5.     <!-- ================================================================== -->   
  6.     <!--                   名称相关functionsAction                                -->   
  7.     <!-- ================================================================== -->   
  8.     <package name="functions" namespace="/admin/BaseInfo"  
  9.         extends="struts-default">   
  10.         <action name="insertFunction" class="functionsAction"  
  11.             method="insert">   
  12.             <result name="success">search_Functions.jsp</result>   
  13.             <result name="input">add_function.jsp</result>   
  14.         </action>   
  15.            <!-- 其他配置省略 -->   
  16.     </package>   
  17.     <!-- ================================================================== -->   
  18.     <!--                   类型相关Action                                -->   
  19.     <!-- ================================================================== -->   
  20.     <package name="functionstype" namespace="/admin/BaseInfo"  
  21.         extends="struts-default">   
  22.         <action name="getAllFunctionstypes" class="functionstypeAction"  
  23.             method="getAllFunctionstypes">   
  24.         </action>   
  25.            <!-- 其他配置省略 -->   
  26.     </package>   
  27. </struts>  


add_function.jsp:  --->>>就这个页面害我两天没睡好觉
Java代码 复制代码
  1. <%@page language="java" pageEncoding="utf-8"%>   
  2. <%@taglib prefix="s" uri="/struts-tags"%>   
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  4. <html xmlns="http://www.w3.org/1999/xhtml">   
  5.     <head>   
  6.         <title>首页</title>   
  7.         <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />   
  8.     </head>   
  9.     <body style="text-align:center;">   
  10.         <s:actionmessage />   
  11.         <s:action name="getAllFunctionstypes" id="getAllFunctionstypes" />   
  12.         <s:set name="types" value="#getAllFunctionstypes.functionstypes"/>   
  13.         <s:form action="insertFunction.action" method="post">   
  14.             <s:select list="%{types}"  
  15.                       listKey="id"  
  16.                       listValue="name"  
  17.                       name="functions.typeId"  
  18.                       label="类型"/>   
  19.             <s:textfield name="functions.name" label="名称"/>   
  20.             <s:submit value="添加"/>   
  21.         </s:form>   
  22.         <hr/>   
  23.     </body>   
  24. </html>  


add_function_success.jsp: --->>>这个页面很简单,个人认为错误不会出在这里,呵呵
Java代码 复制代码
  1. <%@page language="java" pageEncoding="utf-8"%>   
  2. <%@taglib prefix="s" uri="/struts-tags"%>   
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  4. <html xmlns="http://www.w3.org/1999/xhtml">   
  5. <head>   
  6.         <title>首页</title>   
  7.         <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />   
  8.     </head>   
  9.     <body style="text-align:center;">   
  10.         <table width="350px" height="150px" align="center" bgcolor="#ffff00">   
  11.             <tr><td style="color:#00ff00;"><b>成功添加数据!</b><br/><br/>   
  12.                 <a href="add_function.jsp">继续添加</a>    <a href="listAllFunctions.action">查看全部</a>   
  13.             </td></tr>   
  14.         </table>   
  15.     </body>   
  16. </html>  


我现在的感觉是List是不是只能从同一个Action中调出,也只能提交到同一个Action????
评论
xinlcao 2007-08-26   回复
这个错误应该是由于提交的时候,校验出错,返回到提交页面,然后这个时候是直接返回到jsp页面,action没有执行,造成取list的时候没有值,当然不用校验就不会出错了,看看你的校验代码,或者修改action类就行了。

引用

FunctionstypeAction:


代码
package com.mp.job.baseinfo.action;  
 
import java.util.List;  
 
import com.mp.job.baseinfo.service.IFunctionstypeService;  
import com.mp.job.baseinfo.vo.Functionstype;  
import com.mp.job.common.service.JobActionSupport;  
import com.mp.job.exception.BaseException;  
import com.mp.job.util.Pager;  
 
@SuppressWarnings("serial")  
public class FunctionstypeAction extends JobActionSupport {  
    private IFunctionstypeService functionstypeService;  
    private Functionstype functionstype;  
    private List functionstypes;  
    private List functionstypeRecords;  
      
    @SuppressWarnings("unused")  
    private Object[][] params;  
    private Pager pager;  
 
    <!-- getter和setter这里省略! -->  
      
    @SuppressWarnings("unchecked")  
    public String getAllFunctionstypes()throws BaseException{  
            functionstypes = functionstypeService.findAll();  
            return null;  
    }  
          
    <!-- 其他方法这里省略! -->  
 
    public List getFunctionstypes() {  
        return functionstypes;  
    }  
 
    public void setFunctionstypes(List functionstypes) {  
        this.functionstypes = functionstypes;  
    }  
      



修改成:
Java代码 复制代码
  1. //public String getAllFunctionstypes()throws BaseException{      
  2.  //       functionstypes = functionstypeService.findAll();      
  3.  //       return null;      
  4. //}      
  5.           
  6. <!-- 其他方法这里省略! -->      
  7.   
  8. public List getFunctionstypes() {      
  9.     return functionstypeService.findAll();         
  10. }      
  11.   
  12. //public void setFunctionstypes(List functionstypes) {      
  13. //    this.functionstypes = functionstypes;      
  14. //}   
linyuelei 2007-06-26   回复
<action name="getAllFunctionstypes" class="functionstypeAction"method="getAllFunctionstypes"> 
    <interceptor-ref name="basicStack"/>
</action> 
linyuelei 2007-06-26   回复
妈的,终于搞定了加上拦截器<interceptor-ref name="basicStack"/>就可以了出来。
linyuelei 2007-06-26   回复
我页碰到了这个问题,好几天了都没解决!
能具体的说下验证文件那出问题了?我的邮件linyl@pominfo.cn
期待回复。谢谢!
soardragon 2007-06-24   回复
谢谢你的建议
问题已经解决,就是验证文件的问题,
让我恼的差点砸电脑,
不过问题过去了,感觉select还是满有用的,呵呵...
yidishui 2007-06-24   回复
我觉得很有可能是 
Java代码 复制代码
  1. <s:action name="getAllFunctionstypes" id="getAllFunctionstypes" />   
里面加了不合适的拦截器,特别象验证的拦截器,这样你在form提交的时候 却没有验证成功造成的
我在webwork中刚开始也遇到同样的问题
soardragon 2007-06-23   回复
movingboy 多谢你的回答!
今天把action包中的一个验证配置给删了,结果就正常了,
顺便问一个
如果Action的验证配置没有起别名的话是不是会过滤掉所有的东西?
我删的那个配置文件是xxxAction-validation.xml
如果我要针对insert方法过滤是不是要这样写
xxxAction-insert-validation.xml?
movingboy 2007-06-23   回复
在JSP中不使用<s:set>标签,直接按下面写试试:

Java代码 复制代码
  1. <%@page language="java" pageEncoding="utf-8"%>     
  2. <%@taglib prefix="s" uri="/struts-tags"%>     
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">     
  4. <html xmlns="http://www.w3.org/1999/xhtml">     
  5.     <head>     
  6.         <title>首页</title>     
  7.         <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />     
  8.     </head>     
  9.     <body style="text-align:center;">     
  10.         <s:actionmessage />     
  11.         <s:action name="getAllFunctionstypes" id="getAllFunctionstypes" />     
  12.         <s:form action="insertFunction.action" method="post">     
  13.             <s:select list="#getAllFunctionstypes.functionstypes"     
  14.                       listKey="id"     
  15.                       listValue="name"     
  16.                       name="functions.typeId"     
  17.                       label="职能类型"/>     
  18.             <s:textfield name="functions.name" label="职能名称"/>     
  19.             <s:submit value="添加"/>     
  20.         </s:form>     
  21.         <hr/>     
  22.     </body>     
  23. </html>  


另外说一句:list是可以从其它action中取的,