SCWCD duvidas sobre <jsp:useBean> especificamento com o uso de "type"

0 respostas
Lavieri

A minha duvida é sobre uma afirmação do livro da "Head First Servlets & JSP" ou "Use a Cabeça Servlets & JSP" especificamente na afirmação da pagina 418 da versão em Portugues 2° edição do livro, ou da pagina 414 da versão em inglês

no capitulo 8 do livro, há a seguinte afirmação (e para que não pensem que é erro de tradução ta ai a versão em português/inglês

"if you specify a "type" attribute in <jsp:useBean>, you can set properties in <jsp:setProperty> ONLY on properties of the "type", but NOT on properties that exist only in the actual "class" type. (In other words, polymorphism and normal Java type rules apply.)"

na versão em português temos

"Se você especificar um atributo "type" em <jsp:useBean>, você poderá especificar propriedades em <jsp:setProperty> SOMENTE nas propriedades do "type", mas NÃO naquelas que só aparecem no tipo verdadeiro da "class". (Ou seja, as regras de polimorfismo e Java se aplicam.)"

.................

Como eu sou um cara que prefiro testar, resolvi fazer um teste simples, criei duas classes, Uma abstrata denominada "Person" e outra sub-classe concreta "Employee", onde apenas Employee tinha a propriedade "empID"

então fiz um form, em html, que envia os parametros "nome" (comum as duas classes) e "empID" (que apenas employee tem), pelo que fala neste trecho do livro, se eu definir o "type" para a classe "Person", eu não vou conseguir setar o parametro empID, porem ao realizar o teste, vi que a propriedade é acessada normalmente...

isso foi algo que mudou na especificação mais nova ?? ou é pq depende do fabricante do container ?? ou o texto esta errado mesmo ??

eu realizei testes no Glassfish 2.1v do NetBean 6.7 RC1 e no Tomcat 6.0.20 através do Eclipse ... os 2 conseguiram tanto setar a propriedade exclusiva de Employee através do bean, com type definido Person...

Abaixo seguem os códigos usados

Person.java
package com.example;

public abstract class Person {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
Employee.java
package com.example;

public class Employee extends Person {
	private int empID;
	public int getEmpID() {
		return empID;
	}
	public void setEmpID(int empID) {
		this.empID = empID;
	}
}

Então crie um formulario simples, e enviei para um JSP, e setei as propriedades

TestBean.html
&lt;html&gt;
  &lt;body&gt;
      &lt;form action="TestBean.jsp" method="POST"&gt;
          name: &lt;input type="text" name="name" /&gt;

          ID#: &lt;input type="text" name="empID" /&gt;
          &lt;input type="submit" /&gt;
      &lt;/form&gt;
  &lt;/body&gt;
&lt;/html&gt;
TestBean.jsp
&lt;html&gt;&lt;body&gt;
	&lt;jsp:useBean id="person" type="com.example.Person" class="com.example.Employee"&gt;
		&lt;jsp:setProperty name="person" property="name" /&gt;
		&lt;jsp:setProperty name="person" property="empID" /&gt;
	&lt;/jsp:useBean&gt;
	Name: ${person.name}<br>
	ID: ${person.empID}<br>
	<br>
	Name: &lt;jsp:getProperty property="name" name="person"/&gt;<br>
	ID: &lt;jsp:getProperty property="empID" name="person"/&gt;<br>
&lt;/body&gt;&lt;/html&gt;

O resultado ao digitar valores como name: "Xacrinha" ID# "666" são os campos preenchidos e saída

Name: Xacrinha
ID: 666

Name: Xacrinha
ID: 666
Criado 15 de junho de 2009
Respostas 0
Participantes 1