性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-13 11:10 资料 短消息 看全部作者


QUOTE:
原帖由kingofworl于2005-01-13, 10:25:54发表
<jsp:setProperty name="txlInfo" property="*"/>
...   

如果以"*"为值意味着,所有的名称与bean的属性匹配的request参数都将被传递到相应的属性设置方法。
前面已经设置了request参数的名称为"name"

QUOTE:
<input type=text name=name>

bean中的属性列表:
...
String name;
String dz;
String dh;
int yb;
String oicq;
...

所以,name属性的默认set方法setName会被调用


顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-13 11:33 资料 短消息 看全部作者


QUOTE:
原帖由kingofworl于2005-01-13, 11:25:31发表

QUOTE:
原帖由Maxwell于2005-01-13, 11:17:21发表
不懂jsp,不过看起来有点像属性的样子,不知道是否setXXXX自动为XXXX属性的写函数,如果是的话,name=name就应该调用name的写函数了,或者另有其他方法把一个函数跟一个属性关联起来。

看了楼上的好像我猜对了  

不是把,我怎么理解的是 之所以正确传递,是因为
public void setName(String name){
    this.name=name;
  }
里面的this.name,而不是setName
,就是说是红色的决定,而不是蓝色的决定

java里面
类(class)的属性(property)有两个默认的存取方法:get和set
在对对象的属性值进行存取的时候,sun推荐大家都用这两个方法而不是直接修改
其实Maxwell和kingofworl说的都没错
jsp和bean只负责到setName被调用
setName里面写的到底是什么还是由程序员决定的


顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-13 15:20 资料 短消息 看全部作者
给个例子就清楚了
Bean:
public class GuestBean{
  private String firstName;
  private String lastName;
  private String email;

  public void setFirstName(String name){
    firstName = name;
  }

  public String getFirstName(){
    return firstName;
  }

  public void setLastName(String name){
    lastName = name;
  }

  public String getLastName(){
    return = lastName;
  }
...

}

JSP:
...
<jsp:useBean id = "guset" scope = "page" class = "GuestBean" />
<jsp:setProperty name="guest" property="*" />
...
<form method = "post" action = "XXXX.jsp">
<input type = "text" name = "firstName" />
<input type = "text" name = "lastName" />
<input type = "text" name = "email" />
...

以上代码是作为例子出现在高级java大学教程中的
当表单中的属性名和Bean中的属性名同名时,可以不必声明属性的对应关系而直接使用“*”作为默认
显然,当表单将参数firstName、lastName和email的传递给Bean时,由于相应属性为private,是不能直接对其进行修改的,必须通过相应的set、get方法
推荐在编写实际代码时参考以上写法
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-13 15:34 资料 短消息 看全部作者
这个例子就更清晰了:
Bean:
public class Rotator {
  private String images[] = { "images/image1.jpg",
                              "images/image2.jpg",
                              "images/image3.jpg",
                              "images/image4.jpg",
                              "images/image5.jpg"};

  private String links[] = { "http://http://www.xycq.net/forum/index.php?page=1",
          "http://http://www.xycq.net/forum/index.php?page=2",
          "http://http://www.xycq.net/forum/index.php?page=3",
          "http://http://www.xycq.net/forum/index.php?page=4",
          "http://http://www.xycq.net/forum/index.php?page=5"};

  private int selectedIndex = 0;

  public String getImage(){
    return images[selectedIndex];
  }

  public String getLink(){
    return links[selectedIndex];
  }

  public void nextAd(){
    selectedIndex = (selectedIndex + 1) % images.length;
  }
}

JSP

<jsp:useBean id = "rotator" scope = "application" class = "Rotator" />
<jsp:getProperty name="rotator" property="link" />
<jsp:getProperty name="rotator" property="image" />

这个例子里面,Bean的属性名和表单请求的属性名是不同的,同样可以顺利执行,说明Bean是将表单的请求发送给了相应的函数,而跟Bean的属性名没有必然的联系
以上。
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-14 09:16 资料 短消息 看全部作者


QUOTE:
原帖由kingofworl于2005-01-13, 23:55:10发表
我保证你听完我的又糊涂了,经过2个小时的反复试验,发现在指定方法时
<jsp:setProperty name="txlInfo" property="name" param="name"/>

public void setName(String name)
{
  this.name = name;
  
}
红色部分一致才能取到值,和其他如控件名蓝色部分无关,property="*"估计也差不多
谁告诉我这是什么规矩

jsp中引用的属性和bean(class)中的属性是两个概念
如果你认真看完我上面贴的代码
应该能够有所理解
jsp中set(get) property="XXX"指定的值,事实上对应于bean中相应的方法名
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-14 10:03 资料 短消息 看全部作者


QUOTE:
原帖由kingofworl于2005-01-14, 9:34:18发表
我当然看了,书上写的也一样,几个人经验 也应该是这个理论,不过怎么试都不行,是不是其它方面的问题,我试的时候好像每次都重起tomcat还有其他要注意的吗

不需要重启tomcat
你的试验结果支持了你得出的结论啊,有啥好糊涂的?
setXXXX只是个方法名
具体里面是什么代码都可以...
也就是说setXXXX不一定会改变bean中XXXX属性的值(如果有同名的)
你可以用来输出"hello world!"
也可以用来在数据库中建1条记录
java允许你做什么,你就可以做什么
程序流程决定做什么,与名字无关
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-14 10:12 资料 短消息 看全部作者


QUOTE:
原帖由Maxwell于2005-01-14, 10:03:12发表
我现在不明白的是属性怎么跟表单连接起来的,

但是loranrowe没有给出表单,不知是否是笔误?是属性名跟变量名不同?是否是属性名要跟表单中的名字一致?

jsp的实现分3个部分
html、jsp和bean(可选)
html在提交请求的时候,jsp通过<jsp:get(set)Property>句中的param项与html的相应域建立联系,property项建立与bean的联系,这两项都可选

get的时候可以不需要接收域,直接生成html的一部分了

jsp语句是嵌在html里面的,类比宏替换
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-14 10:31 资料 短消息 看全部作者


QUOTE:
原帖由Maxwell于2005-01-14, 10:23:16发表
<input type=text name=a>

<jsp:useBean id = "txlInfo" scope = "page" class = "GuestBean" />
<jsp:setProperty name="txlInfo" property="b" param="a"/>

public class GuestBean{

private String c;

public void setB(String str){
    this.c=str;
}

我认为是这样,表单里的名字要跟param一样,property的名字要跟方法对应,就是同样颜色的要对应,至于变量名就随便起了,比如叫c。

嗯嗯,基本上,简单来讲,就是这样了  
另外说一句,OO语言,很多思想、处理方式都是类似的
一通百通
不过都要先打好结构化语言的基础,才好理解
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-2-14 11:07
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.014591 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP