JSP 页面如何找到正确的参数设置器

How do JSP pages find the correct setters for parameters

假设我有以下 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 方法还是寻找变量?

是否需要设置setter名字+<input>名字?

setter 是否只需要包含一个参数?

该参数是否需要与 <input> 标签同名?

setter 还需要参数吗?

大小写重要吗?

等...

Java 正在检查请求参数。 属性 值上的 askeriks 符号意味着在提交表单时将自动设置与请求参数匹配的所有 bean 属性。

setter名称是否需要设置+名称?否,输入元素中的名称将转换为请求参数,而不是匹配中的属性豆子。无需显式设置 setter 方法的名称。

官方有一个package java.beansAPI.

尝试分析 bean class 的工具的起点是具有 getBeanInfo 方法的 Introspector class,其 class 文档指出:

If we don't find explicit BeanInfo on a class, we use low-level reflection to study the methods of the class and apply standard design patterns to identify property accessors, event sources, or public methods. We then proceed to analyze the class's superclass and add in the information from it (and possibly on up the superclass chain).

它清楚地表明 (public) 方法很重要。

与包的 PropertyDescriptor class 比较,它提供了 属性 的元信息,以及 getReadMethod()getWriteMethod() 返回反射实例 Method class.

属性 访问器方法的模式在 the Bean Specification 的第 7 章和第 8.3 章中进行了描述,但您已经了解了基础知识。了解 java.beans 包后,您可以通过提供明确的 BeanInfo 实现来集成 class 偏离标准模式的元素。