TagLib - Como passar parâmetros dinâmicamente a um atributo da tag?

Olá pessoal,

Estou trabalhando num framework Ajax próprio, voltado a interfaces WEB que imitam sistemas tradicionais, IDE’s Delphi e VB.

Agora falta a adaptação dos códigos HTML + JavaScript para TagLibs, no entando é a primeira vez que crio Tags no Java.

Resumindo estou com um problema bem chato, não consigo passar um parâmetro dinâmico para um atributo qualquer de uma tag.

Por exemplo:

<my:tabPanel label="Clientes:">
  <my:tabBar label="Busca" active="true" />
  <my:tabBar label="Dados" link="?cliId=<%=mybean.getCliId()%>" />
</my:tabPanel>

O código <%=mybean.getCliId()%> não é interpretado por algum motivo!

O desenvolvimento de um framework é muito trabalhoso, se tiver alguém interessado em participar… encaminho os fontes.

Sem mais…
[]'s

ao invés de <% … bla bla bla %>

Tente {objeto.propriedade}

abraço…

na verdade é ${objeto.propriedade}

[quote=zirocool]ao invés de <% … bla bla bla %>

Tente {objeto.propriedade}

abraço…[/quote]

Usando ${mybean.getCliId()} ocorre o seguinte erro:
According to TLD or attribute directive in tag file, attribute label does not accept any expressions

Pesquisei e encontrei o seguinte:

import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager
...
public static Object evaluate(String attributeName,
  String expression,
  Class expectedType,
  Tag tag,
  PageContext pageContext);

Ainda não sei se é esse o caminho…

nao era bem isso…
ehhehe
tenta assim oh ${mybean.clicId}

tem que ser o nome do teu atributo, nao o teu método…

com JSTL funciona assim… nao sei se tem uma implentação especial por trás pra interpertar esse ${._}

Mas dah uma experimentada…

[quote=zirocool]nao era bem isso…
ehhehe
tenta assim oh ${mybean.clicId}

tem que ser o nome do teu atributo, nao o teu método…

com JSTL funciona assim… nao sei se tem uma implentação especial por trás pra interpertar esse ${._}

Mas dah uma experimentada… [/quote]

Não funcionou, tentei assim tabém…
<% String cliId = (String) request.getParameter(“cliId”); %>
<my:tabPanel id=“CliIspm” label=“Clientes Ativos: ${cliId}”>

Queria implementar a minha teg como o exemplo:

&lt;jsp:include&gt;
  &lt;jsp:param name="cliId" value="&lt;%=cliId%&gt;" /&gt;
&lt;/jsp:include&gt;

Olha o que encontrei:

Pergunta:

In the .tld files, every attribute looks like this. But I can’t find
anything anywhere about the third one: rtexprvalue, and when to set it
true and false.

    <attribute>
        <name>value</name>
        <required>false</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>

Resposta:

It stands for “RUN-TIME EXPRESSION VALUE”
It is describe the type of attribute for custom action tag whether
it is evaluated at run-time or not.

BTW: In the JSP 1.1 Spec note you can do this:

Fonte: http://www.mail-archive.com/struts-user@jakarta.apache.org/msg14825.html

Mas não adiantou no meu caso… :shock:

Mano, posta todo o teu fonte aih da tua tag pra poderem te ajudar, e coloca o teu xml tbm.

[ ]'s…

http://java.sun.com/javaee/5/docs/tutorial/doc/JSPTags4.html#wp89574

Olha isso no tutorial da sun…

http://java.sun.com/javaee/5/docs/tutorial/doc/JSPTags7.html#wp90543

Aqui, tem uma parte que explica como usar akeles atributos que eu te falei.
Ah, detalhe, esses atributos no formato ${objeto.campo}, geralmente é pego da sessao, ou da request.
Teu MyBean, tu tah enviando ele por requisição??
tu pode fazer tbm usando as diretivas jsp
<jsp useBean="…" / > e tal, e pegando no formato ${objeto.campo}, com o id da tua declaração…

&lt;jsp:useBean id="contato" type="br.unisc.model.Contato" scope="request" /&gt;

tipo o exemplo acima, daih para mim exibir em uma tag qualquer, eu faria com a <c:out /> o seguinte:

&lt;c:out value="${contato.nome}" /&gt;

Resolvido o problema!

A propriedade do atributo na .tld true funciona sim, é que no caso da tag interna que desenvolvi faço o acúmulo de string num atributo da tag pai e ela no doEndTag imprime todo o resultado.

Preciso entender melhor como funciona esse parâmetro para corrigir a minha tag em específico.

Para um teste que fiz de uma tagPai e outras filhas que jogam o resultado no pageContext diretamente funcionou!

Esclarecendo…

Quando se define que um atributo é interpretado em RUN-TIME true não se pode enviar dados mistos no atributo como o abaixo:
<my:tag attr=“static?var=<%=dinamic %>” />

O certo é:
<my:tag attr="<%=“static?var=”+ dinamic %>" />