这段代码:
<a href="showMsg.jsp?topicid=<%=topic.getTopicId() %>">主题</a>
可以传递一个主题的ID号,但能不能传递一个主题对象了?像这样:
<a href="showMsg.jsp?topic=<%=topic %>">主题</a>
请高手请教!
<a href="showMsg.jsp?topicid=<%=topic.getTopicId() %>">主题</a>
可以传递一个主题的ID号,但能不能传递一个主题对象了?像这样:
<a href="showMsg.jsp?topic=<%=topic %>">主题</a>
请高手请教!
类似于map,键值要匹配~
topic的值是什么?呵呵~
过去[{key:1,value:2},{key;2,value:4}]
Java中没有这样的机制但我们可以借鉴下他的思路。需要自己写一个这样的解析程序
由简单对象组成的简单类型绝对没有问题,下面是一个简单的例子,如果
你想传递的数据类型多一些可以稍微该一下toString和initFromString,比如
你可以增加几行代码使可以不知传递字符
{name:(string)王建波,gender(string)男,age:(int)26}package com.test;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.net.URLDecoder;
import java.net.URLEncoder;public class Demo1 {
public static void main(String[] args){
Men m1=new Men();
m1.setName("王建波");
m1.setGender("男");
m1.setAge("26");
System.out.println(m1.toString());
String sUrl="www.yourweb.com?params="+URLEncoder.encode(m1.toString());
System.out.println("------------------");
System.out.println(sUrl);
System.out.println("------------------");
String sParams=sUrl.substring(sUrl.indexOf('?')+1);
sParams=URLDecoder.decode(sParams);
Men m2=new Men();
try{
m2.initFromString(sParams);
System.out.println(m2.toString());
}catch(Exception e){
e.printStackTrace();
}
}
}class Men{
private String name="";
private String gender="";
private String age="";
public String toString(){
StringBuffer sb=new StringBuffer();
sb.append("{");
sb.append("name:"+this.name);
sb.append(",gender:"+this.gender);
sb.append(",age:"+this.age);
sb.append("}");
return sb.toString();
}
public void initFromString(String sParams) throws Exception{
Method[] methods=this.getClass().getMethods();
Map mapParams=new HashMap();
Pattern pParams=Pattern.compile("(\\w+):(.*?)(?=\\s*,|\\s*})");
Matcher mParams=pParams.matcher(sParams);
while(mParams.find()){
mapParams.put(
mParams.group(1).toLowerCase(),
mParams.group(2));
}
Pattern pMethod=Pattern.compile("^set(\\w+)$");
Matcher mMethod;
String sKey,sValue;
for(Method m:methods){
mMethod=pMethod.matcher(m.getName());
if(mMethod.find()){
sKey=mMethod.group(1).toLowerCase();
sValue=(String)mapParams.get(sKey);
m.invoke(this,new String[]{sValue});
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
你这样只是调用对象的toString方法,还有 在System.out.println()中,即使你不显示调用,也是会调用对象的
toString()方法的。
至于在url中 是否能直接 传递 object ,也没接触过,这地方考虑到 页面请求和响应信息 都是String,不能
单独的就 能输出字符串 就肯定能传递 object吧
一般页面对象传递 不是用request/session的 setAttribute这些函数么
jsp没多久,对框架这些东西不熟悉,不知道是否如你所说可以自动完成我代码中的那些功能
toString()方法的。
至于在url中 是否能直接 传递 object ,也没接触过,这地方考虑到 页面请求和响应信息 都是String,不能
单独的就 能输出字符串 就肯定能传递 object吧
一般页面对象传递 不是用request/session的 setAttribute这些函数么你所说的没错,一般确实用不着这样传对象。一个session.setAttribute()和session.getAttribute()
就可以了,我只是想讨论下楼主说提问题的实现方案。