当前位置:编程学习 > JAVA >>

问一个用struts2专业结构来解决超链接<a>传值的问题

首先,我来描述一下我的问题:这个是分页显示条目的时候的问题,虽然我也能够解决,但是方法太过不专业,我自己都觉得不好看也不对劲,所以想请各位高人支下招,看有没有办法解决哈。

就拿下面这个截图来说:

因为我不知道点击的是哪个标题的超链接,所以很纠结。。。不知道怎么写。。。
所以我的做法是:这里不是用struts2的结构,纯粹的JSP和JavaBean来解决
首先每个超链接都是加上这个
<a href="post/post.jsp?id=<%= postId%>"><%= postId %></a>

然后在post.jsp用
<% request.getParameter("id") %>
来解决,接着用一个JavaBean,
public static Topic selectTopicByPostId(int postId)
来获得一个对象,接着在JSP页面慢慢搞。。。。。

但是我觉得这样有几个我看不顺眼的地方。。。。其一:这个JavaBean放哪,放service层?放DAO层?放tools层?好像都不妥吧。。。其二:还是觉得怪怪的,所以请各位高人支个招了!!!谢谢了 --------------------编程问答-------------------- 使用三层架构,各司其职。。楼主觉得不妥 不妥在哪里呢、? --------------------编程问答-------------------- 为什么不链接到action,action进行业务处理(⊙o⊙)? --------------------编程问答-------------------- 分页的javabean可以写在domain,或者formbean里,也有写在工具类里的,具体实现由dao完成,再由action调用service,service调用dao --------------------编程问答--------------------
引用 1 楼 ch656409110 的回复:
使用三层架构,各司其职。。楼主觉得不妥 不妥在哪里呢、?


额。。。。怎么说呢,struts2不是都用action来解决嘛,但是我目前用的这个方法并没用按照struts2的传统模式(JSP页面写action名字,struts.xml配置到action层,action层调用service层,service层调用DAO)走,而是创建一个Bean然后在JSP页面中直接调用。。。。所以感觉很不适应。而且不知道这个Bean放在哪个层里面。。。。额。。。目前就这些不妥了 --------------------编程问答--------------------
引用 2 楼 qiyuexuel 的回复:
为什么不链接到action,action进行业务处理(⊙o⊙)?


这句话说的好!可是我不会啊。。。超链接上不知道怎么写action啊,struts.xml也不知道怎么配。。。求指教啊 --------------------编程问答-------------------- 我也是这样写的 --------------------编程问答--------------------
  <td > <a  href="<%=basePath%>/user/QueryReceiveEmail_read?readid=<s:property value="#email.id"/>"><s:property value="#email.title"/></a> </td>

上面这代码是点击邮件标题进入对应的邮件详细信息页代码。
1.这里用到的就是超链接至action,其中/user是namespace。QueryReceiveEmail_read用到了*_*通配符,2.QueryReceiveEmail是userpackage下的action--QueryReceiveEmailAction,read是这个action中的read方法。
3.readid就是页面需要传回action的参数,在action中只需定义一个readid,添加get/set方法即可得到其值。
4.既然得到邮件id,你便可在此方法中通过service层调取dao层的数据处理方法得到该邮件信息email。
5. ServletActionContext.getRequest().setAttribute("email",email);
    return "eamilSuccess";
6.在struts.xml中eamilSuccess对应相应的jsp页面  --------------------编程问答--------------------

<a href="<s:url action="test"/>">test</a>

给你们分享哈超链接链接action的方法 --------------------编程问答--------------------
引用 4 楼 luckytjm 的回复:
Quote: 引用 1 楼 ch656409110 的回复:

使用三层架构,各司其职。。楼主觉得不妥 不妥在哪里呢、?


额。。。。怎么说呢,struts2不是都用action来解决嘛,但是我目前用的这个方法并没用按照struts2的传统模式(JSP页面写action名字,struts.xml配置到action层,action层调用service层,service层调用DAO)走,而是创建一个Bean然后在JSP页面中直接调用。。。。所以感觉很不适应。而且不知道这个Bean放在哪个层里面。。。。额。。。目前就这些不妥了


楼主,采用3层逻辑架构,是为了有效的将系统划分为界面处理层,业务逻辑层和数据访问层。这样划分层让每一层都具有相对独立的职责,降低了层与层之间的依赖性。即使某一层发生变化,也不会影响其他层,从而确保了架构的稳定性。  
 目前由于前期的代码没有使用三层 ,不应该使现有的代码继续跟着错下去。。
所以 还是建议分层开发。。

如果还是继续想这样。。  你已经用了struts2 ,,那么你说的Bean 那就放在action层,,然后service层和dao层的逻辑通通在action层实现,因为前期要通过核心控制器拦截。。这样子。。





--------------------编程问答--------------------
引用 7 楼 qiyuexuel 的回复:
  <td > <a  href="<%=basePath%>/user/QueryReceiveEmail_read?readid=<s:property value="#email.id"/>"><s:property value="#email.title"/></a> </td>

上面这代码是点击邮件标题进入对应的邮件详细信息页代码。
1.这里用到的就是超链接至action,其中/user是namespace。QueryReceiveEmail_read用到了*_*通配符,2.QueryReceiveEmail是userpackage下的action--QueryReceiveEmailAction,read是这个action中的read方法。
3.readid就是页面需要传回action的参数,在action中只需定义一个readid,添加get/set方法即可得到其值。
4.既然得到邮件id,你便可在此方法中通过service层调取dao层的数据处理方法得到该邮件信息email。
5. ServletActionContext.getRequest().setAttribute("email",email);
    return "eamilSuccess";
6.在struts.xml中eamilSuccess对应相应的jsp页面 


引用 7 楼 qiyuexuel 的回复:
  <td > <a  href="<%=basePath%>/user/QueryReceiveEmail_read?readid=<s:property value="#email.id"/>"><s:property value="#email.title"/></a> </td>

上面这代码是点击邮件标题进入对应的邮件详细信息页代码。
1.这里用到的就是超链接至action,其中/user是namespace。QueryReceiveEmail_read用到了*_*通配符,2.QueryReceiveEmail是userpackage下的action--QueryReceiveEmailAction,read是这个action中的read方法。
3.readid就是页面需要传回action的参数,在action中只需定义一个readid,添加get/set方法即可得到其值。
4.既然得到邮件id,你便可在此方法中通过service层调取dao层的数据处理方法得到该邮件信息email。
5. ServletActionContext.getRequest().setAttribute("email",email);
    return "eamilSuccess";
6.在struts.xml中eamilSuccess对应相应的jsp页面 


这位仁兄的有点意思,我有个小问题,您说的第五点,是不是改为
ActionContext.getContext().getSession().put("email", email);

更加合适呢?有错误请指出哦!
然后在需要的jsp中取呢? --------------------编程问答--------------------
引用 9 楼 ch656409110 的回复:
Quote: 引用 4 楼 luckytjm 的回复:

Quote: 引用 1 楼 ch656409110 的回复:

使用三层架构,各司其职。。楼主觉得不妥 不妥在哪里呢、?


额。。。。怎么说呢,struts2不是都用action来解决嘛,但是我目前用的这个方法并没用按照struts2的传统模式(JSP页面写action名字,struts.xml配置到action层,action层调用service层,service层调用DAO)走,而是创建一个Bean然后在JSP页面中直接调用。。。。所以感觉很不适应。而且不知道这个Bean放在哪个层里面。。。。额。。。目前就这些不妥了


楼主,采用3层逻辑架构,是为了有效的将系统划分为界面处理层,业务逻辑层和数据访问层。这样划分层让每一层都具有相对独立的职责,降低了层与层之间的依赖性。即使某一层发生变化,也不会影响其他层,从而确保了架构的稳定性。  
 目前由于前期的代码没有使用三层 ,不应该使现有的代码继续跟着错下去。。
所以 还是建议分层开发。。

如果还是继续想这样。。  你已经用了struts2 ,,那么你说的Bean 那就放在action层,,然后service层和dao层的逻辑通通在action层实现,因为前期要通过核心控制器拦截。。这样子。。







这位仁兄,貌似你没明白我的意思。。。。 --------------------编程问答--------------------
引用 8 楼 a963100873 的回复:

<a href="<s:url action="test"/>">test</a>

给你们分享哈超链接链接action的方法


不完全哦!!!看楼上的哈 --------------------编程问答-------------------- 我们所说的三层架构不仅仅是action  service  dao 层,还有业务逻辑层domain 就是我们的实体类或者pojo ,如果我们为了存放查询结果而新建的类,可以自己弄个DTO
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,