Erro no Velocity

Olá,
estou tentando fazer minha 1ª aplicação integrando Struts com Velocity… a aplicação é bem simples, é um login de usuários, mas ainda não coloquei nenhuma funcionalidade, nem regras de BD, apenas coloquei actions fazendo forwards p/ eu testar :slight_smile:
só q está dando um erro, na hr do submit da aplicação…

login.vm:

[code]


Login de Usuários



$!errors.msgs()












>


Login:



Senha:








[/code]

struts-config.xml:

[code]<?xml version="1.0" encoding="UTF-8"?>

[/code]

web.xml:

[code]<?xml version="1.0" encoding="ISO-8859-1"?>

Struts Blank Application action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml debug 2 detail 2 2
<servlet>
	<servlet-name>velocity</servlet-name>
	<servlet-class>
		org.apache.velocity.tools.view.servlet.VelocityViewServlet
	</servlet-class>
	<init-param>
		<param-name>toolbox</param-name>
		<param-value>/WEB-INF/toolbox.xml</param-value>
	</init-param>
	<load-on-startup>10</load-on-startup>
</servlet>

<!-- Map *.vm files to Velocity -->
<servlet-mapping>
	<servlet-name>velocity</servlet-name>
	<url-pattern>*.vm</url-pattern>
</servlet-mapping>

<servlet-mapping>
	<servlet-name>action</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>
index.jsp /tags/struts-bean /WEB-INF/struts-bean.tld /tags/struts-html /WEB-INF/struts-html.tld /tags/struts-logic /WEB-INF/struts-logic.tld /tags/struts-nested /WEB-INF/struts-nested.tld /tags/struts-tiles /WEB-INF/struts-tiles.tld [/code]

O erro q dá é na hr de fazer o submit no form, é esse:

[code]type Status report

message /arrWeb/$link.setAction(’/login’)

description The requested resource (/arrWeb/$link.setAction(’/login’)) is not available.[/code]

aluém sabe me dizer o pq? se esqueci de colocar algo, algo do tipo?

$link esta null?

desculpa minha ignorância…
mas onde eu vejo se o $link tá null e como eu faço p/ setar algo nele?
:frowning:

Essa é a única coisa chata em Velocity :expressionless: olha só a gambiarra quem tem que fazer:

#set( $link = "bananinha" )
#set( $link = $valorQuePodeSerNulo )
#if( $link.equals( "bananinha" ) ## o valor é nulo, então não foi atribuído
    alert( 'é nulo' );
#else
    alert( 'não é nulo weeee' );
#end

Ou seja, quando o valor da atribuição é nulo, a VelocityEngine simplesmente não o atribui. Então é necessário criar um mecanismo parecido com o acima.

Oooou você cria um método em suas actions para checar o valor de um objeto. isNull ou algo semelhante.

Lipe eu estava lendo o tutorial do Guj sobre velocity e vi uma saída para evitar que o value fique com o string literal $parametroUtilizado.
O tutorial explica que tem três tipos de declarar uma variável:

Normal: $nomeVariavel

Silenciosa: $!nomeVariavel

Formal: ${nomeVariavel}

Para resolver esse problema basta usar a forma Silenciosa:

Assim, caso a referência não exista, o resultado gerado após o processamento do template será

Na vera mesmo isso não funciona?
Vlw