java.lang.IllegalArgumentException: id to load is required for loading,报错信息是这样的
你可以在struts.properties文件中配置一下看行不行
Action.java public String update(){ user=Userservice.findByid(User.getUid()); return "update_success", } serviceImpl.java public User findByid(integer uid){ return UserDao.findByid(uid); } userdaoImpl.java public User findByid(integer uid){ return this.getHibernateTemplate().get(User.class,uid); } struts.xml <action name="" class="" method=""> <result name="update_success">update.jsp</result>
<textarea rows="5" cols="50" name ="department.ddesc"><s:property value="%{model.ddesc}" />
可以这么改。。
建立数据库的时候字符集选择utf-8,连接数据库的url这样写jdbc:mysql://localhost:3306/sshdemo?useUnicode=true&characterEncoding=UTF-8"
啥意思?
一个动态,一个静态
... <s:hidden name="departId" value="%{model.departId}"/> ... <td>部门名称:</td> <td><input type="text" name="departName" value="${model.departName}" size="30" placeholder="请输入部门名称"/></td> ... <td valign="top">部门介绍:</td> <td><textarea cols="50" name="departDesc" rows="5" placeholder="请输入部门介绍"><s:property value="%{model.departDesc}" /></textarea></td> ... <!-- 我的是区分写的,在<s: />标签内,我使用的是%,在非<s: />标签内,我使用的是$。 --> <!-- 还有一个就是在<textarea />标签内,使用value属性,无法赋值。所以我使用之前的<s:property />标签 --> <!-- 可以参考一下,这个是我的解决方案 -->
还是显示不出,我还是用值栈吧
public String edit(){
Integer id =Integer.parseInt(org.apache.struts2.ServletActionContext.getRequest().getParameter("id"));
department = departmentService.findById(id);
return "editSuccess";
}
把获取id值得方法修改一下
肯定是因为你就只查到一条数据,可能是你的数据库里只有一条数据,也可能是你的获取数据集合的逻辑有错
%{}
是保证'{' 和 '}'之间的内容是OGNL表达式
如果这样写<s:textfield value="#model.dname"/>
你会发现输出的是#model.dname而不是你想要的值
因为value并不是默认执行OGNL表达式的,而是字符串
%{}是为了保证用OGNL的表达式去执行{}里面的字符串
要在struts.xml配置文件中package加入strict-method-invocation="false"的属性,即<package name="ssh" extends="struts-default" namespace="/" strict-method-invocation="false"></package>。
在数据库配置文件jdbc.properties中url添加characterEncoding参数,例如下面:
jdbc.url=jdbc:mysql://localhost:3306/ssh_employee?characterEncoding=utf8