当前位置: 代码迷 >> Java Web开发 >> Struts中调用ActionForm的getxxx()方法的疑问
  详细解决方案

Struts中调用ActionForm的getxxx()方法的疑问

热度:280   发布时间:2006-07-20 22:42:14.0
Struts中调用ActionForm的getxxx()方法的疑问
就是在Struts中,我想让一个jsp页面获得表单的一个参数,我就在这个jsp页面里用了useBean动作:<jsp:useBean id="sendform" class="com.aa.struts.form.SendForm" scope="session"></jsp:useBean>(SendForm是一个ActionForm);接下来我打算通过如下语句来获得表单提交的用户名和密码来进行验证:
if(user.equals(sendform.getName())&&userpass.equals(sendform.getPassword()))
out.println("<TR bgcolor=bgcolor><td colspan=2><a href=delete.jsp?id="+rs.getInt("id")+">删除本篇</a></td></TR>");

可是,删除本篇 这个链接并没有显示出来,

我现在不知道是我的想法本身就不正确,还是我写的代码错误 ,如果这种方法行不通,那我要如何才能让这个jsp页面获得表单提交的参数呢?

谢谢!!
搜索更多相关主题的帖子: ActionForm  Struts  getxxx  疑问  

----------------解决方案--------------------------------------------------------
思想是错的。
因为ActionForm的方向是从Web页面到Action,而你现在的想法是正好反过来。
如果你想让只有特定权限的人才能浏览到 删除本帖 这个信息,那么你大可把用户信息放到Session中,然后每次对session中的user进行验证,如果session中的user不空且为root或者是这个帖子的发帖者 那么就可以显示出来
----------------解决方案--------------------------------------------------------

成功了!,谢谢你!!!

[此贴子已经被作者于2006-7-21 6:53:02编辑过]


----------------解决方案--------------------------------------------------------
可是,现在又有了另外一个问题,就是如何让这个帖子的发帖者删除自己的留言呢?

因为在显示留言的页面successv.jsp中,删除本篇 这个链接是循环的,我如果在这里加上一个if判断,让登录用户删除留言的话,那他也具有管理员的权限了,

while(i<intPageSize && !rs.isAfterLast())
{
%>
<TR bgcolor="black">

<td width="30%"><NOBR><strong><font color=orange>留言时间:</font></strong></NOBR></td>
<td width="70%" ><font color=orange><%=rs.getString("m_date")%></font></td>
</TR>
<TR bgcolor="">
<td width="30%" ><NOBR><strong>姓名:</strong></NOBR></td>
<td width="70%"><%=rs.getString("name")%></td>
</tr>
<TR bgcolor="black">
<TD width="30%" ><NOBR><strong><font color=orange>标题</font></strong></NOBR></TD>
<td width="70%" ><font color=orange><%=rs.getString("title")%></font></td>
</TR>
<TR >
<TD width="30%" ><NOBR><strong>内容</strong></NOBR></TD>
<TD width="70%" ></TD>
</TR>
<TR bgcolor=white><TD width="70%" colspan=2 ><%=rs.getString("content")%></TD>
</TR>
<TR bgcolor=bgcolor><td colspan=2 width="91" height=30></td></TR>
<%
if(user.equals(request.getSession().getAttribute("user"))&& userpass.equals(request.getSession().getAttribute("pass")))
out.println("<TR bgcolor=bgcolor><td colspan=2><a href=delete.jsp?id="+rs.getInt("id")+">删除本篇</a></td></TR>");

rs.next();
i++;
}
}
%>

要怎么实现呢?
----------------解决方案--------------------------------------------------------
你是鬼啊!!!!!!肯定是鬼!!!!!
----------------解决方案--------------------------------------------------------
你是鬼,我很早就发现了,你不是鬼怎么那么晚睡觉那么早就起来了!!!!!

要解决你的问题,首先要从你的设计结构出发。
我不知道你的数据库中关于留言记录是怎么设定的。假设你的设计是这样:


用户表:USER
ID(用户编号) USERNAME(帐号-UNIQUE) PASSWORD(密码) TYPE(用户类型-有ROOT、USER和GUEST)


帖子表:MESSAGE
ID(帖子编号) TITLE(帖子标题) USER_ID(发帖者编号) CONTEXT(内容) DATE(日期)


评论表:COMMENT
ID(评论编号) MESSAGE_ID(帖子编号-表明这个评论是那个帖子的) USER_ID(发表评论的用户编号) CONTEXT(内容) DATE(日期)


好,现在我们开始编写程序
首先要定义USER类

public class User {
Integer id;
String username;
String password;
String type;
}

public class Root extends User{
}

public class Guest extends User{
}

public class Message {
Integer id;
String title;
Integer userId;
String context;
java.sql.Date date;
}

public class Comment {
Integer id;
Integer messageId;
Integer userId;
String context;
java.sql.Date date;
}

登录程序就不用再多说了,相信你也会写 ,但是关键的是如何把已经成功登录的用户信息保存到session中去。
比如说,我们有个用户成功登录了

在LoginAction类中:

//这里,UserDao就是操作数据库的相关类。这个叫DAO模式,对WEB+数据库编程非常有用,建议你去看看
User user = UserDao.get(loginForm().getUsername(),loginForm().getPassword());

//把成功登录的用户信息保存到session中的user属性去
if(user!=null) request.getSession().setAttribute("user",user);




下面再给出个ROOT成功登录的操作看看
User root = UserDao.get(loginForm().getUsername(),loginForm().getPassword(),loginForm().getUserType());
if(root!=null) request.getSession().setAttribute("user",root);

比较下,上面两个对登录用户进行验证的过程有什么区别。不求马上理解得了的。特别是DAO模式,DAO就是这类设计的核心思想和精华所在。这样,你在JSP中写那些难看的JAVA的时代结束了。
说真的,我还从来没有用过JAVABEAN....更加别说<%=%> 消除<%%>代码块最好用JSTL标签。




用户删除帖子操作。你不是在学STRUTS么。那么我们就应该把删除帖子、发表帖子这类的操作放入Action中去执行

在DeleteAction类中:
//在这里验证用户有无删除本帖子的权限

//通过帖子编号获取要删除的帖子
Message message = MessageDao.get(deleteMessageForm().getId());

//从session中获取用户权限信息
//首先是获取ROOT权限的信息,这里假设一个留言板只有一个管理员
User user = (User)request.getSession().getAttribute("user");
if( user.getType().equale("ROOT") || user.getId()==message.getUserId())//验证是否有权限删除帖子,管理员和发起这个帖子的人可以删除
//执行删除操作
MessageDao.delete(message.getId());




还有很多安全和实现的细节我还没说,等你先入门了再提。
不求你马上理解,慢慢品味吧。

[此贴子已经被作者于2006-7-21 8:33:15编辑过]


----------------解决方案--------------------------------------------------------
楼上说话真的很可爱
----------------解决方案--------------------------------------------------------
呵呵,我又成功了!!

谢谢各位啦!!!
----------------解决方案--------------------------------------------------------
以下是引用神vLinux飘飘在2006-7-21 8:30:20的发言:
你是鬼,我很早就发现了,你不是鬼怎么那么晚睡觉那么早就起来了!!!!!

要解决你的问题,首先要从你的设计结构出发。
我不知道你的数据库中关于留言记录是怎么设定的。假设你的设计是这样:


用户表:USER
ID(用户编号) USERNAME(帐号-UNIQUE) PASSWORD(密码) TYPE(用户类型-有ROOT、USER和GUEST)


帖子表:MESSAGE
ID(帖子编号) TITLE(帖子标题) USER_ID(发帖者编号) CONTEXT(内容) DATE(日期)


评论表:COMMENT
ID(评论编号) MESSAGE_ID(帖子编号-表明这个评论是那个帖子的) USER_ID(发表评论的用户编号) CONTEXT(内容) DATE(日期)


好,现在我们开始编写程序
首先要定义USER类

public class User {
Integer id;
String username;
String password;
String type;
}

public class Root extends User{
}

public class Guest extends User{
}

public class Message {
Integer id;
String title;
Integer userId;
String context;
java.sql.Date date;
}

public class Comment {
Integer id;
Integer messageId;
Integer userId;
String context;
java.sql.Date date;
}

登录程序就不用再多说了,相信你也会写 ,但是关键的是如何把已经成功登录的用户信息保存到session中去。
比如说,我们有个用户成功登录了

在LoginAction类中:

//这里,UserDao就是操作数据库的相关类。这个叫DAO模式,对WEB+数据库编程非常有用,建议你去看看
User user = UserDao.get(loginForm().getUsername(),loginForm().getPassword());

//把成功登录的用户信息保存到session中的user属性去
if(user!=null) request.getSession().setAttribute("user",user);




下面再给出个ROOT成功登录的操作看看
User root = UserDao.get(loginForm().getUsername(),loginForm().getPassword(),loginForm().getUserType());
if(root!=null) request.getSession().setAttribute("user",root);

比较下,上面两个对登录用户进行验证的过程有什么区别。不求马上理解得了的。特别是DAO模式,DAO就是这类设计的核心思想和精华所在。这样,你在JSP中写那些难看的JAVA的时代结束了。
说真的,我还从来没有用过JAVABEAN....更加别说<%=%> 消除<%%>代码块最好用JSTL标签。




用户删除帖子操作。你不是在学STRUTS么。那么我们就应该把删除帖子、发表帖子这类的操作放入Action中去执行

在DeleteAction类中:
//在这里验证用户有无删除本帖子的权限

//通过帖子编号获取要删除的帖子
Message message = MessageDao.get(deleteMessageForm().getId());

//从session中获取用户权限信息
//首先是获取ROOT权限的信息,这里假设一个留言板只有一个管理员
User user = (User)request.getSession().getAttribute("user");
if( user.getType().equale("ROOT") || user.getId()==message.getUserId())//验证是否有权限删除帖子,管理员和发起这个帖子的人可以删除
//执行删除操作
MessageDao.delete(message.getId());




还有很多安全和实现的细节我还没说,等你先入门了再提。
不求你马上理解,慢慢品味吧。

我发现你挺伟大的!看了你写的这些话,我觉得我这个留言板根本就拿不出手去,根本都算不上是Struts了,基本就是JSP了,真是难过。。。


----------------解决方案--------------------------------------------------------

问一个问题,不要取笑我,就是 表单 跟 Action 是否是 一对一 的关系?是不是一个表单对应一个Action,一个Action 对应一个表单?


----------------解决方案--------------------------------------------------------
  相关解决方案