Как JSP страниц найти правильные параметры для параметров - PullRequest
1 голос
/ 30 января 2020

Скажем, у меня есть следующая 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 искать метод установки или он ищет переменную?

Нужно ли задавать имя установщика + <input> имя?

Должен ли сеттер содержать только один параметр?

Должен ли этот параметр иметь то же имя, что и тег <input>?

Нужны ли даже параметры для установщика?

Имеет ли значение заглавная буква?

и др c ...

Ответы [ 2 ]

1 голос
/ 31 января 2020

В официальном API есть пакет java.beans.

Отправной точкой для инструмента, пытающегося проанализировать класс бина, является Introspector класс имея метод getBeanInfo, чей класс do c сообщает:

Если мы не найдем явное BeanInfo в классе, мы используем низкоуровневое отражение для изучения методов класса и применять стандартные шаблоны проектирования для определения средств доступа к свойствам, источников событий или методов publi c. Затем мы приступаем к анализу суперкласса класса и добавляем информацию из него (и, возможно, по цепочке суперклассов).

В нем четко сказано, что (publi c) методы имеют значение.

Сравните с PropertyDescriptor классом пакета, который предоставляет метаинформацию свойства, вместе с getReadMethod() и getWriteMethod(), возвращающими экземпляры класса Reflection Method.

Шаблоны для методов доступа к свойствам описаны в главах 7 и 8.3 Спецификации Bean , но вы уже показали, что знаете основы. Зная пакет java.beans, вы можете интегрировать классы, отклоняющиеся от стандартного шаблона, предоставляя явные реализации BeanInfo.

0 голосов
/ 30 января 2020

Java проверяет параметры запроса. Знак askeriks на значении свойства означает, что все свойства bean-компонентов, которые соответствуют параметрам запроса, будут установлены автоматически при отправке формы.

Нужно ли задавать имя установщика + name? Нет, имя в элементе input будет преобразовано в параметр запроса, сопоставленный со свойствами в bean-компоненте. Нет необходимости явно устанавливать имя метода установки.

...