这段代码:
<a href="showMsg.jsp?topicid=<%=topic.getTopicId() %>">主题</a>
可以传递一个主题的ID号,但能不能传递一个主题对象了?像这样:
<a href="showMsg.jsp?topic=<%=topic %>">主题</a>
请高手请教!

解决方案 »

  1.   

    不行的~
    类似于map,键值要匹配~
    topic的值是什么?呵呵~
      

  2.   

    不知道这样行不,让你的对象支持序列化,然后把序列化的值传过去。比如一个Map可以传一个这样的串
    过去[{key:1,value:2},{key;2,value:4}]
      

  3.   

    不行吧,getparameter取出来是字符串啊
      

  4.   

    如果你写过js肯定知道JS中有json对象,你传一个那样的串过去eval("("+str+")")就可以得到一个对象。
    Java中没有这样的机制但我们可以借鉴下他的思路。需要自己写一个这样的解析程序
      

  5.   

    那些说不行的人肯定没有试过,可以肯定的说对于可以用字符串来表示的、
    由简单对象组成的简单类型绝对没有问题,下面是一个简单的例子,如果
    你想传递的数据类型多一些可以稍微该一下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;
    }
    }
      

  6.   

    你这个完全可以用EL表达式嘛 或者jstl啊
      

  7.   


    你这样只是调用对象的toString方法,还有 在System.out.println()中,即使你不显示调用,也是会调用对象的
    toString()方法的。
    至于在url中 是否能直接 传递 object  ,也没接触过,这地方考虑到 页面请求和响应信息 都是String,不能
    单独的就 能输出字符串  就肯定能传递 object吧
    一般页面对象传递 不是用request/session的 setAttribute这些函数么
      

  8.   

    那段代码的作用是完成类似jsp中根据表单内容自动填充javaBean。El表达式和jstl没有用过,刚接触
    jsp没多久,对框架这些东西不熟悉,不知道是否如你所说可以自动完成我代码中的那些功能
      

  9.   

    to:zjc_love你这样只是调用对象的toString方法,还有 在System.out.println()中,即使你不显示调用,也是会调用对象的
    toString()方法的。
    至于在url中 是否能直接 传递 object  ,也没接触过,这地方考虑到 页面请求和响应信息 都是String,不能
    单独的就 能输出字符串  就肯定能传递 object吧
    一般页面对象传递 不是用request/session的 setAttribute这些函数么你所说的没错,一般确实用不着这样传对象。一个session.setAttribute()和session.getAttribute()
    就可以了,我只是想讨论下楼主说提问题的实现方案。
      

  10.   

    可以把&id=1&name=2..反射给一个对象,不过要自己写代码来做