点集贵州电脑网
 
 
 梦想之源 ›› 灌水专区 ›› 传递对象的问题 版主:
灌水专区
新建论坛
申请免费TS
1 / 3 页
<< 1 2 3 >>
跳转
 主题:传递对象的问题
 
 lele
发表时间:[2007-10-31 11:57:31] [向作者发站内短信] [复制链接告诉朋友]
等 级:列兵
经 验:498
性 别:帅哥
文 章:138
精 华:0

1。我在public IPage linkToUpdateDevice(IRequestCycle cycle){
 
 // 模板页面的名称
 String pageName ="";
   。。。。 很多省略了
   String xmldata = XMLUtil.parseDocumentToString(XMLUtil.readFileToDocument("dataset.xml"));
   //然后得到对象
   Device oo=getObject("1000",xmldata);
   System.out.println(oo.name);//证明对象确实存在,能取出其中的任何属性值
   page.setDeviceParameter(oo);//set到页面类里
 // 5.跳转
 return page;
}
然后我在 返回到的page 页面,目的是显示这个对象信息

2。在页面类中,Device 对象的setter/getter为如下

 public abstract void setDeviceParameter(Device deviceParameter);
 
 public abstract Device getDeviceParameter();

3。在跳转到的页面上,显示如下

    <component id="device_name" type="TextField">
          <binding name="value" value="ognl:deviceParameter.name"/>
    </component>

。。。。以下都是text组件,相同

如上,ognl:deviceParameter.name指定的就是被传递过来的Device对象,但是什么错误也没的,因为在    <component id="device_name" type="TextField">
          <binding name="value" value="ognl:deviceParameter.name"/>
    </component>这个组件的位置不会显示对象本身存在的信息

 


 楼主更多新贴 :  
灌水专区jfreechart图形上的链接
灌水专区itemselection的问题
灌水专区ognl:devicegroup.id
灌水专区foreach的问题
  楼1  
等 级:下士
经 验:1683
性 别:帅哥
文 章:496
精 华:2
 干煸四季豆
发表时间:[2007-10-31 12:26:15] [向作者发站内短信] [复制链接告诉朋友]

我看了,觉得你的调用方式是对的。在跳转页面中,如果deviceParameter对象为null,那么会报错的。既然没有报错,就只会两种情况

1)deviceParameter是一个new Device()对象,里面没有值。如果是这种情况,那么意味者跳转页面的时候,没有传递过来。或者在跳转页面被T展现(render)的时候,deviceParameter被初始化为new Device()。

2)HTML中没有调用id="device_name"的TextField组件。

两种方式查实:

1)将跳转页面中

public abstract void setDeviceParameter(Device deviceParameter);
 
 public abstract Device getDeviceParameter();

改为以下代码,并删除page文件中的<property name="deviceParameter"/>

private Device deviceParameter;

@Override

protected void initialize() {

            deviceParameter = null;

}

public void setDeviceParameter(Device deviceParameter) {

           this.deviceParameter  = deviceParameter ;

}
 
 public Device getDeviceParameter() {

          return deviceParameter ; //在这里设一个断点,看看页面调用该对象时,是否有值。

}

如果此时页面报错,或者deviceParameter 对象为new Device(),那么代表对象没有正确传递过来,你需要检查跳转这个页面的监听方法。

2)检查id="device_name"的TextField组件是否正常。

本贴共修改过 1 次 最后一次修改者:干煸四季豆 最后一次修改时间:2007-10-31 12:27:19   
  楼2  
等 级:列兵
经 验:498
性 别:帅哥
文 章:138
精 华:0
 lele
发表时间:[2007-10-31 12:35:51] [向作者发站内短信] [复制链接告诉朋友]

在页面调用该对象的时候确实显示该对象为空

  楼3  
等 级:列兵
经 验:498
性 别:帅哥
文 章:138
精 华:0
 lele
发表时间:[2007-10-31 12:41:19] [向作者发站内短信] [复制链接告诉朋友]

1。我在public IPage linkToUpdateDevice(IRequestCycle cycle){
 
 // 模板页面的名称
 String pageName ="";
   。。。。 很多省略了
   String xmldata = XMLUtil.parseDocumentToString(XMLUtil.readFileToDocument("dataset.xml"));
   //然后得到对象
   Device oo=getObject("1000",xmldata);
   System.out.println(oo.name);//证明对象确实存在,能取出其中的任何属性值
   page.setDeviceParameter(oo);//set到页面类里
 // 5.跳转
 return page;
}

监听的方法你也看到了就这个,对象确实是能打印出来属性的,也不抱错误,然后存进去,但是在

return deviceParameter ; //在这里设一个断点,看看页面调用该对象时,是否有值。这个语句前面加上打印语句 打印该对象的属性时,显示的都是空的,确实我理解不了为什么,不能向页面类中存对象,这个是不可能的

  楼4  
等 级:下士
经 验:1683
性 别:帅哥
文 章:496
精 华:2
 干煸四季豆
发表时间:[2007-10-31 12:45:28] [向作者发站内短信] [复制链接告诉朋友]

在linkToUpdateDevice监听方法中,你如何获得页面对象的?

  楼5  
等 级:列兵
经 验:498
性 别:帅哥
文 章:138
精 华:0
 lele
发表时间:[2007-10-31 12:47:54] [向作者发站内短信] [复制链接告诉朋友]

public IPage linkToUpdateDevice(IRequestCycle cycle){
 
 // 模板页面的名称
 String pageName ="";
 // 1、得到参数
 Object[] parameters = cycle.getListenerParameters();
 //第一个参数是设备原型名称
 String prototype = (String) parameters[0];
 //第二个参数是设备id
 String deviceid=(String)parameters[1];
 
 // 如果设备类型是AIX主机,则跳转到"updateAIXDevice"页面
 if (Constant.DEVICE_TYPE_AIX.equals(prototype)) {
  pageName = "UpdateAIXDevice";
 }
 // 如果设备类型是fastt,则跳转到"updateIBMFastTDevice"页面
 else if (Constant.DEVICE_TYPE_FASTT.equals(prototype)) {
  pageName = "UpdateIBMFastTDevice";
 }
 // 如果设备类型是7133,则跳转到"update7133Device"页面
 else if (Constant.DEVICE_TYPE_7133.equals(prototype)) {
  pageName = "Update7133Device";
 }
 // 如果设备类型是3534,则跳转到"update3534Device"页面
 else if (Constant.DEVICE_TYPE_3534.equals(prototype.trim())) {
  pageName = "Update3534Device";
 }
 // 如果设备类型是windows主机,则跳转到"updateWindowsDevice"页面
 else if (Constant.DEVICE_TYPE_WINDOWS.equals(prototype)) {
  pageName = "UpdateWindowsDevice";
 }
 //否则跳转到统一错误处理页面
 else
 {
  pageName="";
 }

 //String xmldata = XMLUtil.parseDocumentToString(XMLUtil.readFileToDocument("dataset.xml"));
 // 3、注入页面类,此页面为跳转后的页面
 ActionPage page = (ActionPage) cycle.getPage(pageName);
 // 4、将xml数据注入到page页面
   //page.setContent(xmldata);
   page.setOid(deviceid);
   //在连接里有参数设备id,执行action=getdeviceinfo&id=得到数据信息
   String xmldata = XMLUtil.parseDocumentToString(XMLUtil.readFileToDocument("dataset.xml"));
   //然后得到对象
   Device oo=new Device();
    oo=getObject("1000",xmldata);
   System.out.println(oo.name);
   page.setDeviceParameter(oo);
 // 5.跳转
 return page;
}

  楼6  
等 级:下士
经 验:1683
性 别:帅哥
文 章:496
精 华:2
 干煸四季豆
发表时间:[2007-10-31 12:51:08] [向作者发站内短信] [复制链接告诉朋友]

从上面看,ActionPage应该是UpdateAIXDevice、Update7133Device等页面的父类吧?

你现在做这样一个测试。不要搞这么多页面判断,就单纯一个页面。比如Update7133Device。

Update7133Device page = (Update7133Device)cycle.getPage("Update7133Device");

然后传递参数,跳传Update7133Device,看看有没有值。

 

  楼7  
等 级:列兵
经 验:498
性 别:帅哥
文 章:138
精 华:0
 lele
发表时间:[2007-10-31 13:08:40] [向作者发站内短信] [复制链接告诉朋友]

确实如你猜测的那样,这个问题解决了,能拿到值了。一会我告诉你为什么,估计你会笑死  A页面上有个连接 目的是取值跳转到B页面 但是AB页面都对应的页面类是 CVC.java  在这个页面类里有listener,有abstract Device... 所以我分析 当跳转到B的时候,页面刷新了存储的devcie对象 你觉得呢

  楼8  
等 级:下士
经 验:1683
性 别:帅哥
文 章:496
精 华:2
 干煸四季豆
发表时间:[2007-10-31 13:09:58] [向作者发站内短信] [复制链接告诉朋友]

呵呵,解决就好。

  楼9  
等 级:列兵
经 验:498
性 别:帅哥
文 章:138
精 华:0
 lele
发表时间:[2007-10-31 13:53:24] [向作者发站内短信] [复制链接告诉朋友]

s有点新问题:刚才那个问题,得到值的页面,submit的时候出现问题,总是说
org.apache.tapestry.BindingException
Unable to update OGNL expression '<parsed OGNL expression>' of $AIXUPage_14@cc2061[UpdateAIXDevice] to one: target is null for setProperty(null, "name", one)
binding: ExpressionBinding[UpdateAIXDevice deviceParameter.name]
location: context:/device/UpdateAIXDevice.page, line 15, column 68
10  
11 <component id="updateDevice" type="Form">
12 <binding name="listener" value="listener:updateDevice"/>
13 </component>
14 <component id="device_name" type="TextField">
15 <binding name="value" value="ognl:deviceParameter.name"/>
16 </component>
17 <component id="device_IP" type="TextField">
18 <binding name="value" value="ognl:deviceParameter.connectip"/>
19 </component>
20

但是我分析的总有 错误,没改好 ,你帮我分析下,因为组件都是这样定义的

 <component id="device_name" type="TextField">
          <binding name="value" value="ognl:deviceParameter.name"/>
    </component>

target is null for setProperty(null, "name", one) 这里的one是页面上显示的值

1 / 3 页
<< 1 2 3 >>
跳转
  快速回复
  帐号: 密码: 匿名不登陆
回复内容:  
验 证 码:
 
 
·VIP收费TS,您明智的选择!
·9800GT+19'液晶DIY仅售3500元
·双核特惠:1999、2999、3999
·什么是点金积分,如何查看自
·团购一期:三星R458-DS0G+高