【问题标题】:How do JSP pages find the correct setters for parametersJSP 页面如何找到正确的参数设置器
【发布时间】:2020-05-15 23:50:28
【问题描述】:

假设我有以下 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如何知道将&lt;input&gt;标签中的值传递给setTest()方法?

我想了解它们如何链接的内部工作原理,我假设使用了反射。

java是找setter方法还是找变量?

是否需要设置setter名称+&lt;input&gt;名称?

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

该参数是否需要与&lt;input&gt; 标签同名?

setter 还需要参数吗?

大小写重要吗?

等等……

【问题讨论】:

    标签: java jsp reflection javabeans setter


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      官方API中有package java.beans

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

      如果我们没有在类上找到显式的 BeanInfo,我们会使用低级反射来研究类的方法并应用标准设计模式来识别属性访问器、事件源或公共方法。然后我们继续分析该类的超类并添加来自它的信息(并且可能在超类链上)。

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

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

      the Bean Specification 的第 7 章和第 8.3 章描述了属性访问器方法的模式,但您已经了解了基础知识。借助 java.beans 包的知识,您可以通过提供显式的 BeanInfo 实现来集成偏离标准模式的类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 2015-03-28
        相关资源
        最近更新 更多