`
soardragon
  • 浏览: 316475 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

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

阅读更多
在表单用中到了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的时候页面空白
我看了一下源文件,页面只执行了一部分,
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>首页</title>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
	</head>
	<body style="text-align:center;">
		
		
		
					
<form id="insertFunction" onsubmit="return true;" action="insertFunction.action" method="post">
<table class="wwFormTable">


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

FunctionsAction:
package com.mp.job.baseinfo.action;

import java.util.List;

import com.mp.job.baseinfo.service.IFunctionsService;
import com.mp.job.baseinfo.vo.Functions;
import com.mp.job.common.service.JobActionSupport;
import com.mp.job.exception.BaseException;
import com.mp.job.util.Pager;

@SuppressWarnings("serial")
public class FunctionsAction extends JobActionSupport {
	private IFunctionsService functionsService;
	private Functions functions;
	private List functionsRecords;
	@SuppressWarnings("unused")
	private Object[][] params;
	private Pager pager;

         <!-- getter和setter这里省略! -->
	
	public String insert()throws BaseException{
		try{
		functionsService.save(functions);
		}catch(Exception e){
			e.toString();
			addActionMessage("插入数据时出现异常!");
			return INPUT;
		}
		return SUCCESS;
	}
	<!-- 其他的方法省略 -->
		
}


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;
	}
	
}


struts.xml  --->>>其中用到的Action我都在Spring中配置过了
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<!-- ================================================================== -->
	<!--                   名称相关functionsAction                                -->
	<!-- ================================================================== -->
	<package name="functions" namespace="/admin/BaseInfo"
		extends="struts-default">
		<action name="insertFunction" class="functionsAction"
			method="insert">
			<result name="success">search_Functions.jsp</result>
			<result name="input">add_function.jsp</result>
		</action>
           <!-- 其他配置省略 -->
	</package>
	<!-- ================================================================== -->
	<!--                   类型相关Action                                -->
	<!-- ================================================================== -->
	<package name="functionstype" namespace="/admin/BaseInfo"
		extends="struts-default">
		<action name="getAllFunctionstypes" class="functionstypeAction"
			method="getAllFunctionstypes">
		</action>
           <!-- 其他配置省略 -->
	</package>
</struts>


add_function.jsp:  --->>>就这个页面害我两天没睡好觉
<%@page language="java" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>首页</title>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
	</head>
	<body style="text-align:center;">
		<s:actionmessage />
		<s:action name="getAllFunctionstypes" id="getAllFunctionstypes" />
		<s:set name="types" value="#getAllFunctionstypes.functionstypes"/>
		<s:form action="insertFunction.action" method="post">
			<s:select list="%{types}"
					  listKey="id"
					  listValue="name"
					  name="functions.typeId"
					  label="类型"/>
			<s:textfield name="functions.name" label="名称"/>
			<s:submit value="添加"/>
		</s:form>
		<hr/>
	</body>
</html>


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


我现在的感觉是List是不是只能从同一个Action中调出,也只能提交到同一个Action????
分享到:
评论
8 楼 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;  
    }  
      



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

<%@page language="java" pageEncoding="utf-8"%>  
<%@taglib prefix="s" uri="/struts-tags"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
    <head>  
        <title>首页</title>  
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
    </head>  
    <body style="text-align:center;">  
        <s:actionmessage />  
        <s:action name="getAllFunctionstypes" id="getAllFunctionstypes" />  
        <s:form action="insertFunction.action" method="post">  
            <s:select list="#getAllFunctionstypes.functionstypes"  
                      listKey="id"  
                      listValue="name"  
                      name="functions.typeId"  
                      label="职能类型"/>  
            <s:textfield name="functions.name" label="职能名称"/>  
            <s:submit value="添加"/>  
        </s:form>  
        <hr/>  
    </body>  
</html>


另外说一句:list是可以从其它action中取的,我曾经用过这种办法;但提交只能到同一个action

相关推荐

    struts2-tags-API,struts2标签api

    OGNL(Object-Graph Navigation Language)是Struts2中用于数据绑定的语言,它允许在标签中直接访问Action对象的属性。例如,`&lt;s:property value="#session.user.name" /&gt;`就能显示会话中用户对象的姓名属性。 五、...

    Struts 中用Html 标签库的用法(第一部分).rar

    Struts提供`&lt;html:errors&gt;`标签用于显示ActionForm验证时的错误信息,以及`&lt;html:message&gt;`标签用于显示国际化消息。例如: ```jsp ``` 7. **隐藏字段** `&lt;html:hidden&gt;`标签用于创建隐藏字段,这对于传递...

    struts标签-HTML标签笔记

    - `action`:指定提交表单时的目标URL。 - `method`:指定表单提交的方式,通常是`GET`或`POST`。 ##### 2.2 `&lt;html:text&gt;` 标签 - **功能**:用于创建文本输入框。 - **示例**: ```xml ``` - **关键属性**...

    中文-Struts2-Tags-API chm格式 非常详细的标签使用说明有例子

    3. **表单标签**:Struts2提供了一整套表单相关的标签,如`&lt;s:form&gt;`定义表单,`&lt;s:submit&gt;`提交表单,`&lt;s:checkboxlist&gt;`和`s:select`用于创建多选和下拉菜单,以及`&lt;s:iterator&gt;`遍历集合数据。 4. **验证标签**...

    java+Struts

    Struts2的Form Bean可以映射表单字段,Action类接收到请求后,将Form Bean的数据持久化到数据库。在SQL Server中,这可能涉及到`INSERT`语句的执行。 2. **读取(Read)**: 读取数据可以是单一记录或列表。Struts2...

    一个简单的增删查改demo(jsp,jdbc,struts2)

    3. **JSP页面**:展示数据并收集用户输入,通常会使用Struts2的标签库,如s:form、s:textfield等,来简化表单的创建和数据绑定。 4. **配置文件**:Struts2的struts.xml配置文件定义了Action类及其对应的URL映射,...

    三大框架ssh题库.docx

    Struts2表单标签库包含、和等标签。 **5. 在Struts应用中,能在下列哪几种范围内共享数据说法错误的是(A)。** - **request**: 可以在一次请求内共享数据。 - **session**: 可以在整个会话期间共享数据。 - **...

    javaEE过程化考核

    `ActionForm`是Struts1中用来封装表单数据的对象,在Struts2中已经被`Action`中的`set`和`get`方法所取代。 - **C. ActionServlet**:不正确。这是Struts1中的控制器组件,而在Struts2中,控制器组件是`Action`。 ...

    JavaEE(权威)

    - **保存表单数据**:将用户提交的表单数据保存到数据库中。 - **显示数据**:从数据库中检索数据并在页面上显示。 ### 六、JSP (JavaServer Pages) #### 6.1 JSP 简介 JSP 是一种用于生成动态网页的技术。它允许...

    java面试题及答案

    此外,Struts 还提供了 ActionForm 对象来封装用户输入的数据,并通过表单验证确保数据的有效性。 #### MVC 设计模式详解 **问题:** 请详细解释 MVC 设计模式的概念。 **答案:** MVC 设计模式是一种广泛应用于...

Global site tag (gtag.js) - Google Analytics