<jsp: useBean> имеет тело, выполнение которого является условным, но в этом случае его выполнение выполняется каждый раз, почему? - PullRequest
1 голос
/ 15 февраля 2012

Это мой jsp, в котором я написал useBean стандартное действие, которое также содержит тело jsp: setProperty !! Согласно правилам тело тега useBean должно выполняться только тогда, когда Контейнер создает новый Бин из-за тега useBean, если Бин не существует.

Но в моем случае я уже создал bean-компонент Person.class в папке foo в папке классов в web-inf. Таким образом, правило говорит, что если Bean уже существует, то тег setProperty не должен выполняться, но он выполняется каждый раз.

И если я удаляю Бин из папки foo, тогда я получаю Исключение NoClassDefFound

Пожалуйста, предоставьте правильное обоснование или дайте мне какую-либо логику для этого, если кто-то знает об этом.

action.jsp

<%@ page import="foo.Person"%>
<html>
<head>
<title>Action JSP</title>
</head>
<body>
<h1 align="center">Standard Actions are used Here.</h1>
<br>
<jsp:useBean id="person" class="foo.Person" scope="request" >
<jsp:setProperty name="person" property="name" value="Ankur Garg" />
</jsp:useBean>
Name is: <jsp:getProperty name="person" property="name" />
<br>
Name set by Standard action: 

<% 
foo.Person p = (foo.Person) pageContext.getAttribute("person",PageContext.REQUEST_SCOPE);
%>

<%=
p.getName()
%>

<br>

Residence not set:
<%=
p.getResidence()
%>

Password passes by user is: 
<%
    String param = request.getParameter("Password");
    out.print("<br>"+param);
%>

<br>
<a href="CallActionJsp">Call Again </a>
</body>
</html>

Спасибо и С уважением Анкур Гарг

1 Ответ

0 голосов
/ 15 февраля 2012

В соответствии с правилами тело тега useBean должно выполняться только тогда, когда Контейнер создает new Bean из-за тега useBean, если Bean не существует.

Но в моем случае я уже сделал бин Person.class в папке foo в папке classes из web-inf. Таким образом, правило говорит, что если Bean уже существует, то тег setProperty не должен выполняться, но он выполняется каждый раз.

Вы путаете "классы" с "экземплярами". Person.class не считается экземпляром компонента. Это проект класса бобов.

Часть "если Bean не существует" относится к экземпляру класса компонента, который был помещен в указанную область. Вы указали его для размещения в области запроса. Таким образом, каждый отдельный HTTP-запрос будет воссоздавать экземпляр компонента просто потому, что экземпляр будет удален к концу запроса. Если вы поместите его в область действия сеанса на scope="session", то он будет создан в начале сеанса HTTP и будет удален в конце сеанса. Сеанс может охватывать несколько запросов.

...