假设我有以下JSP页面:
<jsp:useBean id="bean" scope="page" class="com.test.jsp.beans.TestBean"/>
<jsp:setProperty name="bean" property="*"/>
...
<input type="text" name="test" value="test value"/>
...
和豆子:
package com.test.jsp.beans;
public class TestBean {
public String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
java 如何知道将值从<input>
标记传递给setTest()
方法?
我想了解它们如何链接的内部工作原理,我假设使用反射。
java 是寻找 setter 方法还是寻找变量?
需要设置二传手名称 +<input>
名称吗?
资源库是否只需要包含一个参数?
该参数是否需要与<input>
标记同名?
二传手甚至需要参数吗?
大写重要吗?
等。。。
官方 API 中有一个包java.beans
。
尝试分析 Bean 类的工具的起点是具有getBeanInfo
方法的Introspector
类,其类文档指出:
如果我们在类上找不到显式 BeanInfo,我们使用低级反射来研究类的方法,并应用标准设计模式来识别属性访问器、事件源或公共方法。然后,我们继续分析类的超类并从中添加信息(可能还有超类链上的信息(。
它清楚地表明(公共(方法很重要。
与包的PropertyDescriptor
类进行比较,该类提供属性的元信息,以及反射Method
类的getReadMethod()
和getWriteMethod()
返回实例。
属性访问器方法的模式在 Bean 规范的第 7 章和第 8.3 章中进行了描述,但您已经证明了解了基础知识。了解java.beans
包后,您可以通过提供显式BeanInfo
实现来集成偏离标准模式的类。
Java 正在检查请求参数。属性值上的 askeriks 符号意味着在提交表单时将自动设置与请求参数匹配的所有 bean 属性。
二传手名称是否需要设置+名称?否,输入元素中的名称将转换为请求参数,而不是与 Bean 中的属性匹配。无需显式设置 setter 方法的名称。