Help com WebWork (ModelDriven)

26 respostas
eduardo_lopes

E aí moçada, estou aqui em pleno domingão desvendando o WW para não matar mais tantas foquinhas todo o dia, e visto que na empresa q trabalho iremos no fim do ano iniciar um desenvolvimento bravo em web e terei de ensinar mais uns 5 desenvolvedores algum framework, e lógicamente, o número de focas mortas seria multiplicado por 5, então espero que vcs me ajudem com essa pequena dúvida de iniciante:

estou tentando fazer uma simples action funcionar utilizando a interface ModelDriven, onde estou errando? pois o bean não é carregado:

Obs.: os nomes dos campos no form são iguais aos nomes das propriedades dos beans.

bean “Magazine”

public class Magazine implements Serializable {
	
	private Long codigo;
	private String nome;
	private String editora;	
	private int paginas;

      //gets and sets
}

Action

public class MagazineManagerAction extends ActionSupport 
										implements ModelDriven {
	
	private Magazine model = new Magazine();

	public Object getModel() {		
		return this.model;
	}
	
	public String execute() throws Exception {
		System.out.println("Codigo: "+ model.getCodigo());
		System.out.println("Nome: "+ model.getNome());
		return SUCCESS;
	}	

}

xwork.xml

...
	<package name="default" extends="webwork-default">

		<!-- Default interceptor stack. -->
		<default-interceptor-ref name="defaultStack" />
		
		<action
			name="magazine"
			class="org.eduardo.articles.controller.actions.MagazineManagerAction">
			<result name="success" type="velocity">pages/magazine.vm</result>
			<interceptor-ref name="model-driven"/>
		</action>
		
	</package>
 ...

26 Respostas

R

Eduardo,

Que tipo de erro esta ocorrendo ?
Por um acaso estou fazendo um trabalho aqui com WebWork e Hibernate e jah vi varios tipos de erros ocorrendo.
Assim poderemos ir direto ao ponto.

andre_a_s

Tenta implementar a classe CommandDriven

eduardo_lopes

Nâo ocorre erro algum, apenas o bean “Magazine” não é populado, se vc olhar o código peço para que escreva no log os valores mas o que tenho de resultado é:

Codigo: null
Nome: null

Bom, na verdade nem sei pra que serve essa classe, como disse estou “desvendando” o WW, mas vou procurar algo a respeito.

Valeu!

Eduardo

cv1

Eduardo, quais as variaveis do seu form HTML? Tenta colocar uma tag form simplezinha e um botao de submit, mais ou menos assim:

form action="MagazineManager.action" input type="text" name="codigo" value="10" input type="text" name="nome" value="Teste" input type="submit"

E ve no que da :slight_smile:

eduardo_lopes

eu tava fazendo assim:

http://localhost:8080/ww/magazine.action?codigo=10&nome=Teste

mas vou tentar criando um form, é q deixei os fontes em casa, mas cv o código está correto, não? ele deveria preencher o bean sem esforço, correto?

estou usando a versão 2.1.7 do WW.

andre_a_s

eduardo_lopes:
eu tava fazendo assim:

http://localhost:8080/ww/magazine.action?codigo=10&nome=Teste

Só pra lembrar… agente não tem acesso ao SEU localhost :twisted:

cv1

Andre, o ele so tava dando exemplo da url - o que interessa eram os parametros :slight_smile:

Eduardo, hmm… se pans eu errei nos nomes dos parametros… ja tentou model.codigo e model.nome?

eduardo_lopes

andre_a_s:
eduardo_lopes:
eu tava fazendo assim:

http://localhost:8080/ww/magazine.action?codigo=10&nome=Teste

Só pra lembrar… agente não tem acesso ao SEU localhost :twisted:

putz, foi mal é que o JForum coloca como link, mas como disse o cv a intenção era demonstrar os parametros :slight_smile:

cv, valeu, vou testar mudando o nome dos parametros.

R

O cv tem razão muda a forma como passa os parametros que com certeza funciona !

Diogenes

Declara o interceptor…

<interceptor name="model-driven" class="com.opensymphony.xwork.interceptor.ModelDrivenInterceptor"/>
eduardo_lopes

diogenes, abri o webwork-default e está lá a declaração do interceptor.
bom fiz os testes q vcs pediram e não adiantou.

Caramba, é uma vergonha mesmo, mas não to conseguindo, se alguém conseguir tá em anexo o projeto (ridículo), apenas não adicionei os libs mas os arquivos estão listados abaixo:

R

Eduardo tenta mudar teu arquivo index.jsp ai para este codigo, no mometo não tenho como testar mas acredito que resolva.

WebWork Tutorial - Lesson 3 - Example 1

Click the button below to activate HelloWebWorldAction.

R

notei que enviando o texto altera visualização

onde vc estiver vendo ‘’’ tres apostofes isto e " aspas dulplas mais ’ e depois a variável .

F

Hmm, e o metodo set onde esta?

Como o WW, vai criar teu objeto setando os valores dele (que estao no teu form) e depois setar na action?

]['s

R

faz melhor copia este codigo aqui :

<%@ taglib prefix=“ww” uri=“webwork” %>
<ww:i18n name="‘lesson03/HelloWebWorldAction’">

WebWork Tutorial - Lesson 3 - Example 1

Click the button below to activate HelloWebWorldAction.

eduardo_lopes

fabgp2001:
Hmm, e o metodo set onde esta?

Como o WW, vai criar teu objeto setando os valores dele (que estao no teu form) e depois setar na action?

]['s

ok fábio, mas eu já estou declarando o meu objeto Magazine e instanciando ele (Magazine model = new Magazine()), mesmo assim, criando o método “set” não adiantou =o(

valeu roberto, vc tá tentando me fazer testar se o webwork tá rodando corretamente né? eu já rodei os exemplos do tutorial oficial, tá tudo normal, apenas não to conseguindo popular o bean nessa minha classe “Magazine”

[]'s

Z

Está lá, fábio. Pelo menos ele botou um comentário no código dizendo que contem os getters e setters. :evil:

[editado]: ahmmmm! ok, Fabio. :slight_smile:

F

Eu tava falando do zip que ele colocou aqui anexado. Que nao tem set pra String hello.

Outra coisa, no teu web.xml tu declara o jar do WW assim.

<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>/WEB-INF/lib/webwork-2.0.jar</taglib-location>
</taglib>

E nas lib (postada anteriormente) ta usando o jar 2.1.7

A unica coisa que eu achei diferente é que nao tem a declaracao do filtro e listener do WW no web.xml.

]['s

R

Era isto mesmo mas se vc diz que esta ok ! Então verifique a chamada para getModel e setModel em sua Action !

eduardo_lopes

ok fábio, esse meu exemplo anterior tava furado, é q eu tava reproduzindo o meu código que está em casa, daí deixei alguns vestígios dos tutoriais, dê uma olhada nesses fontes, e esqueça o que tinha de “HelloWorld” no exemplo anterior, o meu problema está na classe MagazineAction e o bean Magazine.

eduardo_lopes

ah, e aqui na documentação não diz nada de filter e listeners:

http://www.opensymphony.com/webwork/wikidocs/TutorialLesson02.html

:?

eduardo_lopes

bom moçada, não sei o que eu entendi errado, agora eu coloquei explicitamente um get para o meu objeto Magazine e também um set para ele, tirei o interceptor do “model-driven” e também fiz a action não implementar ModelDriven.

Agora funcionou, então, para que serve esse ModelDriven? Ele não deveria popular o meu bean ?

_fs

WebWork já popula os beans. Essa interface é só perfume.

R

Eu utilizei o ModelDriven e funcionou , mas no meu form utilizo o nome do meu bean, por exemplo tenho um bean “Usuario”, no form utilizo assim:

usuario.id
usuario.username
etc …

Acredito que se vc utilizar com o nome do seu bean deva funcar ,
tente com magazine.variavel , isto no teu arquivo *.vm .

Assim saberemos se este Model serve pra algo ! Rsssssssssss !

Z

Serve exatamente para que você não precise definir o nome do bean (acho que a vantagem disso já foi explicada nessa thread). Só precisa passar no form o nome do atributo, ele seta os valores no bean definido como model.

Passando o nome do bean no form (usuario.id, usuario.nome) você não vai está fazendo uso de “Model Driven”, nem precisa implementar essa interface.

Assim como o Lipe, também acho essa interface perfume. Não vejo uma vantagem real, além de poder dizer pros coleguinhas que sei usar Model Driven e eles não. :mgreen:

eduardo_lopes

putz, eu não posso dizer o mesmo para os coleguinhas, rs, pq aqui não funcionou, mas pensando bem vou usar o nome do bean e boa por enquanto.

obrigado a todos.

Criado 12 de junho de 2005
Ultima resposta 13 de jun. de 2005
Respostas 26
Participantes 8