如果加载一个门户的首页,有许多个频道,如何调用action的多个参数啊!
比如:
频道1 = listme.action?id=1频道2 = listme.action?id=2
频道3 = listme.action?id=3
频道4 = listme.action?id=4
频道5 = listme.action?id=5
我是用自定义标签实现,把代码封装进自定义的TAG里,可以跨项目的重用。你不要再补充了,问答只能给你提供思路,具体的细节还是需要自己去思考的,不可能别人为了拿分帮你干活。
总的来说就这几种方式:
1,传统方式,action丢进request里,一般采用map,jsp根据名字从map里拿出对应的list,然后遍历list。
2,AJAX方式,就不说了。
3,自定义标签,这个就是为了解决扩展性与重用性,如果写在action里,以后可能会增加代码,页面action都得改,用这个,就只需要在页面加一个tag,不过不具有通用性,但做开发的谁没有自己积累的东西呢?即使换了公司也只需要把通用的东西更改一下,便可以和新的框架融为一体了,又可以重用了。原理:利用了hibernate的OpenSessionInView,通过配置为jsp开通session作用域,由于jsp到最后都是编译为servelet,所以jsp-tag也会一起被编译,jsp-tag主要封装了调用相关数据库查询方法的代码。
[quote="kaki"]如果加载一个门户的首页,有许多个频道,如何调用action的多个参数啊!
比如:
[code="java"]频道1 = listme.action?id=1
频道2 = listme.action?id=2
频道3 = listme.action?id=3
频道4 = listme.action?id=4
频道5 = listme.action?id=5[/code]
就是这样的怎么办?[/quote]
发错地方了吧。
8) 怎么回事,知道了还问?
频道5 = listme.action?id=5&xxx=xxx
你啥意思?
就这样写着呗
不明白你要问的是什么意思?
你这样写不就是传了一个参数id嘛,
要传多个的话,那就继续在后面加嘛
listme.action?id=1¶m=xxx
我觉得可能是你思路上有些不对,是不是一个页面上调出多个栏目的数据?
[quote]你这样写不就是传了一个参数id嘛,
要传多个的话,那就继续在后面加嘛
listme.action?id=1¶m=xxx[/quote]
同意
可以传参啊
一个action可以有多个方法的
可以通过参数调用不同的方法啊
不太明白什么意思。是不是不知道传过去的参数在action中怎样获取?
[code="java"]
package cn.ln.chanel.actions;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ChanelAction extends ActionSupport {
private String logicPath;
@Override
public String execute() throws Exception {
String param = ServletActionContext.getRequest().getParameter("param");
if(param.equals("1")) {
logicPath = "/a.jsp";
}else if(param.equals("2")) {
logicPath = "/b.jsp";
}else if(param.equals("2")) {
logicPath = "/c.jsp";
}
return SUCCESS;
}
public String getLogicPath() {
return logicPath;
}
public void setLogicPath(String logicPath) {
this.logicPath = logicPath;
}
}
[/code]
[code="java"]
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<iframe id="main" name="main">
</iframe>
[/code]
[code="java"]
struts.xml
<?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">
${logicPath}
[/code]
给个提示:
你跳转是不是都有个事件?
如ONCLICK等
我打个比方有很多图片来区分
[code="js"]
function dispatch(id){
document.location.href="listme.action?id="+id;
}
/code]
[code="html"]
[/code]
这种最好就用ajax来异步请求数据,再展示,
你的需求是每个频道都是一个块,块中的数据都是不一样的,刚好可以以ajax的方式,每个块的展示由一个ajax请求的数据来填充
用ajax效率还低啊?不懂从哪方面理解的
不然就可以把数据都放在request里,然后用jsp标签遍历生成各个块的数据
你可以把所有的频道信息id配置在一个xml文件,由action去读取这个配置文件来加载对应的数据不就行了,
你这里不是有这个规则嘛
频道1 对应id=1
频道2 对应id=2
频道3 对应id=3
频道4 对应id=4
频道5 对应id=5
你把这个写在配置文件properties文件中,比如
channel1=1
channel2=2
channel3=3
channel4=4
channel5=5
那你就可以根据配置了多少就去数据库中取哪些数据,页面我想你的频道的显示数据块也有一定有规则吧,看分几栏来显示这些频道,
struts2提供了action标签,可以允许在jsp页面中直接调用action,并可以把action处理的结果包含在页面中来。
可以在action里定一个List getChannelList( Long id )的方法
调用哪个频道由页面定,如,然后直接循环输出,这样可以否
它本身也有遍历的标签嘛,自己遍历list啦,
每个频道都在一个div块中,这部分html代码还是要自己搞一下