一个jsp参数传入action(struts2)取不到值的问题,值为null.跪求大神解答!急!急!

flyingMan_ZUO 思普集团 Java程序员  2014-10-21 11:30:35
我想做一个删除的功能,但是id传入的值为空,(%{id}这个值为空)。不知道是怎么回事,他报的错误是“id to load is required for loading”,求大神解答!代码如下:
jsp:
<table cellspacing="0" cellpadding="0" class="TableStyle">

<!-- 表头-->
<thead>
<tr align="CENTER" valign="MIDDLE" id="TableTitle">
<td width="200px">岗位名称</td>
<td width="300px">岗位说明</td>
<td>相关操作</td>
</tr>
</thead>

<!--显示数据列表-->
<tbody id="TableData" class="dataContainer" datakey="roleList">

<s:iterator value="#roleList">
<tr class="TableDetail1 template">
<td>${name} </td>
<td>${description} </td>
<td>
<s:a action="role_delete?id=%{id}" onclick="return confirm('确定要删除吗?')">删除</s:a>
<s:a action="role_editUI?id=%{id}">修改</s:a>
<s:a action="role_setPrivilegeUI?id=%{id}">设置权限</s:a>
</td>
</tr>
</s:iterator>

</tbody>
</table>

action类的代码:[b][/b]
@Controller
@Scope("prototype")
public class RoleAction extends BaseAction<Role>{

private static final long serialVersionUID = 1L;

/**
* 系统管理岗位列表
*
* @return
* @throws Exception
*/
public String list() throws Exception {
List<Role> roleList = roleService.findAll();
// ServletActionContext.getRequest().setAttribute("roleList",roleList);
ActionContext.getContext().put("roleList", roleList);
return "list";
}

/**
* 系统岗位删除管理
*
* @return
* @throws Exception
*/
public String delete() {
try {
System.out.println(model.getId());
roleService.delete(model.getId());

} catch (Exception e) {

e.printStackTrace();
}

return "toList";
}。。。。。。。

BaseAction代码:

public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T> {

// =============== ModelDriven的支持 ==================

protected T model;

public BaseAction() {
try {
// 通过反射获取model的真实类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
// 通过反射创建model的实例
model = clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public T getModel() {
return model;
}

// =============== Service实例的声明 ==================
@Resource
protected RoleService roleService;
。。。。。

错误信息:

null 这个是id传入的值
null
java.lang.IllegalArgumentException: id to load is required for loading
at org.hibernate.event.LoadEvent.<init>(LoadEvent.java:89)
at org.hibernate.event.LoadEvent.<init>(LoadEvent.java:61)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:1002)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:998)
at com.spg.oa.base.DaoSupportImpl.findById(DaoSupportImpl.java:75)
at com.spg.oa.base.DaoSupportImpl.delete(DaoSupportImpl.java:52)
at com.spg.oa.service.impl.RoleServiceImpl.delete(RoleServiceImpl.java:42)
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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy12.delete(Unknown Source)
更多 1
...全文
415 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Defonds 2014-10-21
前台拿到的 id 是空吧 我怀疑 jsp 前台拿到的就是空的,然后传给后台 atcion 的肯定就是空的了
回复
一般hibernate的getSession().get(xx.class,id)传给该方法的id参数为null,会报id to load is required for loading错误. 你还是调试一下,看哪个地方出id传递出问题了.
回复
flyingMan_ZUO 2014-10-21
引用 7 楼 lucky_love1234 的回复:
struts2标签取值 (roleList为实体类集合)
<s:iterator value="#roleList“  >
								<tr>	<td class="center"><s:property value="name" />
									</td>
</tr>
<s:a action="role_delete?id=<s:property value="id"/>" onclick="return confirm('确定要删除吗?')">删除</s:a>
							</s:iterator>
不行,加载报错!
回复
flyingMan_ZUO 2014-10-21
引用 2 楼 u013349191 的回复:
<s:a action="role_delete?id=%{id}" onclick="return confirm('确定要删除吗?')">删除</s:a> 改成<s:a action="role_delete?id=${id}" onclick="return confirm('确定要删除吗?')">删除</s:a>
${id}这样不能写加载就要报错<S:A>标签没有这样传值的。
回复
flyingMan_ZUO 2014-10-21
引用 1 楼 defonds 的回复:
前台拿到的 id 是空吧 我怀疑 jsp 前台拿到的就是空的,然后传给后台 atcion 的肯定就是空的了
前台拿到的不为空,有值,但这样写就为空了%{id}。取不到值,不知道怎么回事,这样写应该没有错误呀!
回复
lucky_love123 2014-10-21
struts2标签取值 (roleList为实体类集合)
<s:iterator value="#roleList“  >
								<tr>	<td class="center"><s:property value="name" />
									</td>
</tr>
<s:a action="role_delete?id=<s:property value="id"/>" onclick="return confirm('确定要删除吗?')">删除</s:a>
							</s:iterator>
回复
shixitong 2014-10-21
<s:iterator value="#roleList" id="role"> <s:property value="#role.id"/> </s:iterator> 看看还有值?
回复
lucky_love123 2014-10-21
你先看看页面取到值了没
回复
software_gemeng 2014-10-21
你查看一下浏览器的源码看看是不是已经获取到值了,如果id值是获取到了,那你再接着看传到action里面为什么是空的。如果前台获取到id了,你再在action里面用比较原始的方法request.getParamter()的方法获取一下看看,如果能获取到,你就看看action那边是不是定义的私有变量没有写set get方法~~~ 楼主这样一步一步检查一下吧~~!!!
回复
建议楼主不要使用struts2.x的标签,多使用JSTL的!哪天项目MVC换成SpringMVC了,这样改的地方就多了. 二楼的方法你可以尝试一下!
回复
寻找执念 2014-10-21
<s:a action="role_delete?id=%{id}" onclick="return confirm('确定要删除吗?')">删除</s:a> 改成<s:a action="role_delete?id=${id}" onclick="return confirm('确定要删除吗?')">删除</s:a>
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告