Existe algo parecido com Custom Tags em Ruby?

52 respostas
S

Dá para utilizar Ruby a la MVC, sem templates por exemplo.

Existe algo parecido com custom tags em Ruby, para facilitar e limpar a camada view ?

52 Respostas

J

Sim, o Rails (que é um framework MVC para o Ruby) têm os Helpers, que funcionam como taglibs. Cada controller gerado têm o seu próprio helper, e existe o appliction_helper.rb que é global e é só editar e ainda tem as bibliotecas de helpers (ActiveView, ActiveRecord e por ai vai).

Por exemplo, para mostrar um input de seleção de datas fazemos assim:

pronto… ou se quiser melhorar…

E você tem a escolha só do mes/ano.

Agora vamos fazer o novo proprio?

def hello_tag(name) "Hello #{name}!" end

no RHTML coloque:

E voce terá um Hello Saoj!

K

Essa eh a melhor parte. :smiley:

IMHO, do jeito que esta hoje, as tags sao uma das piores partes do desenvolvimento Web com Java. Fazer a taglib ate que nao eh complicado (mas tem suas bizarrices), porem a burocracia envolvida em disponibiliza-la para a aplicacao eh triste. As ultimas especificacoes de Servlets/JSP tem melhorado isso, mas esta longe do ideal. Por causa disso ja existia gente pensando em usar Java+PHP ha anos atras, antes das ondas “RoR” e “JVM com linguagens nao-Java”.

Marcio Kuchma

K

Essa eh a melhor parte. :smiley:

IMHO, do jeito que esta hoje, as tags sao uma das piores partes do desenvolvimento Web com Java. Fazer a taglib ate que nao eh complicado (mas tem suas bizarrices), porem a burocracia envolvida em disponibiliza-la para a aplicacao eh triste. As ultimas especificacoes de Servlets/JSP tem melhorado isso, mas esta longe do ideal. Por causa disso ja existia gente pensando em usar Java+PHP ha anos atras, antes das ondas “RoR” e “JVM com linguagens nao-Java”.

Marcio Kuchma

Bom eu uso bastante JSTL e funciona bem. Claro que pra um escopo definido, criar suas tags é outra coisa totalmente diferente.

Há quem goste de ustilizar o Velocity exatamente por isso e definir suas macros.

K

Tambem uso. Nao vou negar que funciona. :slight_smile:

Mas a ideia inicial que era isolar codigo de forma que autores de paginas pudessem utiliza-lo sem conhecer Java, nao foi pra frente. Eu pelo menos nao vi ainda um ambiente em que desenvolvedores implementassem tags e autores de paginas apenas as utilizassem (isso me lembra os zilhoes de “roles” que os livros de J2EE falam na introducao).

Normalmente utilizamos tags para a camada view - mas, pera, eu sou o programador Java. Em suma, tiveram uma boa intencao, mas as tags sao a solucao certa para o problema errado, na minha opiniao.

Exato. O problema eh que o Velocity e outros fw de templates nao sao especificados pelo JCP. Ai ja viu… :roll:

Marcio Kuchma

U

isto não é praticamente oficializar o Scriptlet que tanto odiamos?

K

Na minha interpretacao nao, pois o codigo dos helpers fica isolado, no caso do Rails. Esse eh o problema do scriptlet - espalhar codigo nao-pertinente na camada visual. Isolando isso, resolve-se o problema. Mesmo nos velhos tempos de PHP, qualquer programador nao-newbie ja sabia como resolver isso, criando arquivos de funcoes utilitarias isoladas. :slight_smile:

Marcio Kuchma

R

Pessoal, na prática isso é uma porcaria :stuck_out_tongue:

Dá pra vc fazer em java também, você usaria algo assim? :slight_smile:

public class Taglib {

   public static String hello(String name) {
       return "Hello "+name;
   }
}

e no JSP

<html>
<body>
<%= Taglib.hello("Rubem"); %>
</body>
</html>

:slight_smile:

Fala verdade… Assim como nós devemos desligar o “Java is Cool”, vamos desligar o “Ruby\Rails is Cool” também :slight_smile:

F

Não vi nada d+ nesse esquema de tags do RoR. E outra coisa não é tag coisa nenhuma… porque tag ( <…/&gt ) não é scriptlet ( <% …%> ).

C
microfilo:
Pessoal, na prática isso é uma porcaria :P

Dá pra vc fazer em java também, você usaria algo assim? :)

public class Taglib {

   public static String hello(String name) {
       return "Hello "+name;
   }
}

e no JSP

&lt;html&gt;
&lt;body&gt;
&lt;%= Taglib.hello("Rubem"); %&gt;
&lt;/body&gt;
&lt;/html&gt;

Usaria, com certeza. Nao eh isso que as taglibs fazem, servir de helper pra view nao ter que ficar manipulando objetos de negocio meio sacais de navegar, ou gerar pedacos de XHTML repetitivos?

Nao vejo pq um metodo estatico e uma chamada nao resolvem.

K

Qual a diferenca do exemplo que voce deu em relacao a:

&lt;html&gt;
&lt;body&gt;
&lt;taglib:hello name="Rubem"/&gt;
&lt;/body&gt;
&lt;/html&gt;

Concordo contigo. Proponho argumentacao com fatos. Em que usar uma tag ao inves de codigo faz com que a situacao fique menos “porcaria”?

BTW, os helpers do Rails sao muito bons e ninguem sente falta de tags. Por que sera? E olha que o nicho do Rails eh desenvolvimento pra Web. Nao estou dizendo que “Rails eh cool” e Java nao presta por causa disso. Java tem suas opcoes, como o Click e o ECS. Em outro nivel, tem Velocity e Freemarker. Groovy pode ser uma opcao para desenvolver as telas.

Na verdade a questao eh mais sobre “programar parte visual com tags” versus “programar parte visual com Java”, e nao simplesmente Ruby vs Java, como parece ser o modo que varias pessoas encaram esse tipo de discussao.

Marcio Kuchma

C

Exato, nao tem nada demais, e pq deveria ter? Eh soh um jeito de tirar alguma logica de apresentacao mais complexa de dentro dos RHTMLs, oras!

Entupir scriptlets com codigo eh sempre uma ideia ruim, mas se vc se restringir a chamar um metodo de um helper, que eh facil de testar separadamente e garantir que funciona bonitinho, qual o problema?

R

cv:

Usaria, com certeza. Nao eh isso que as taglibs fazem, servir de helper pra view nao ter que ficar manipulando objetos de negocio meio sacais de navegar, ou gerar pedacos de XHTML repetitivos?

Nao vejo pq um metodo estatico e uma chamada nao resolvem.

Taglibs são mais apropriadas do que Helpers estáticos. Com elas você em zero de código Java na view, são bem mais fáceis do designer entender, ela tem acesso aos contextos (não sei se este helper do rails faz isso…), ferramentas se dão melhor com ela, a página fica bem mais limpa.

Costumo trabalhar com um grande conjunto de taglibs que agilizam muito o desenvolvimento das telas. Seria péssimo ter que ficar utilizando esses helpers, a página ia ficar muito poluida com código Java no meio…

P

Isso sem contar os ajax helpers nativos…

&lt%= link_to_remote &quot;Remove&quot;, :url=&gt{ :controller=&gt&quot;animals&quot;, :action=&gt&quot;destroy&quot;, :id=&gtanimal.id}, :update=&gt&quot;animal#{animal.id}&quot;, :loading=&gt&quot;status('animal#{animal.id}')&quot; %&gt

http://wiki.rubyonrails.org/rails/pages/How+to+use+the+Ajax+helpers

P

Não sei em qual realidade vocês trabalham, mas ao menos aqui no sul, a GRANDE maioria das empresas de TI, telinhas e etc, quem faz é os próprios desenvolvedores, e designer só aparece na brincadeira(quando aparece), para estabelecer um padrão de layout e os desenvolvedores seguirem. Então, acho que essa do “designer entender” não é muito válida.

F

A questão não é somente pela extrema facilidade de entendimento de código pelos designers, mas também por estabelecer limites de construção de códigos em JSP, a construção de tags melhora a componentização e facilita a programação de novas telas.

Com scriptlet (mesmo com uma chamada a um helper) possibilita maiores margens de erros na programação. E é uma porcaria trabalhar com eles quando se tem uma comunicação com diversos parâmetros.

Preferencialmente uso tags, E.L. mas scriptlet saio correndo.

Agora enfim, se esse é o mecanismo que o RoR provê para criação de tags, meus pêsames, mas os recursos de custom tags, EL, tagfiles, JSTL são bem melhores.

P

Cite algo que você pode fazer com EL/JSTL/taglibs que não pode ser feito usando os helpers?

F

Cite algo que você pode fazer com EL/JSTL/taglibs que não pode ser feito usando os helpers?
Não estou dizendo que não dá pra ser feito. Estou dizendo que é horrivelmente bizarro. Mas hoje o que queremos é rapidez no desenvolvimento, componentização, e facilidade de manutenção.

P

Fabrício, continuo não entendendo teu ponto. Você esta querendo me dizer que ter uma outra linguagem (sim, porque JSTL,EL,Velocity, Freemaker,etc são outras linguages), é mais fácil de manter, do que ter na sua view pedacinhos de código numa linguagem que você conhece - e utiliza em todos os outros pontos da sua aplicação?

F

Enfim, existe um esquema de tags <tag>…</tag> no RoR ou só existe esse uso melado de scriptlet ( <% horrível %> )?

C

Nao, e provavelmente nunca vai ter, pq nao ha necessidade pra isso. Webdesigners hoje em dia trabalham com CSS, nao com (X)HTML: este ultimo fica a cargo dos desenvolvedores.

De novo, scriptlet so eh horrivel quando tem regra de negocio dentro.

D

i++

E eu não odeio scriptlet, não. Claro, é horrivel fazer lógicas inteiras em scriptlet, eu acho apenas uma questão de costume (ou regras pré-definidas).

U

o problema é que incentivando o uso de scriptlets nas páginas vai gerar a mesma porcariada que gerou no java …
quando um bando de retardados resolveu “programar em JSP”

A

http://www.martinfowler.com/bliki/SoftwareDevelopmentAttitude.html

D

urubatan:
o problema é que incentivando o uso de scriptlets nas páginas vai gerar a mesma porcariada que gerou no java …
quando um bando de retardados resolveu “programar em JSP”

Se o cara é incapacitado a programar decentemente, em qualquer linguagem que ele programar vai gerar porcaria.

T

É o cúmulo do fanboyismo advogar o uso de “scriptlets”. Hahahahaha

Parece que a maioria dos que se mostram “pró Ruby hype” o fazem mais por medo de “perder o trem da história” do que por vantagens propriamente ditas.

O restante é formado por viciados em Spring que encontraram uma forma de fazer “wiring” sem precisar editar XML e acham que encontraram o “Santo Graal” da programação.

Já dissera anteriormente e mantenho que isso está muito parecido com hype de Linux: há mais de 10 anos que ele acabará com o Windows “a qualquer momento”, só que esse dia nunca chega.

D

Ruby, Linux, OOO… esse GUJ tá parecendo local de reunião da seita desse pessoal.

F

Não vejo problema nisso, quanto mais comparações e discussões com outras tecnologias melhor. Aliás quem sabe o GUJ não vira o GUT ( Grupo de Usuários de Tecnologia ) ? :smiley:

J

Honestamente não sei por que é melhor o cara programar a página JSP dele utilizando a taglib SQL (JSTL) ou utilizando Scriptlet executando a regra de negócio nela. Para mim, as duas formas são ruins. O problema não está no Scriptlet, e sim no uso comun dele.

O que incomoda no Scriptlet do JSP não é o código Java. É a falta de integração entre o controller/servlet/JSTL com o Scriplet. Um resquest.setAttribute não gerá um váriavel que possa ser utilizada no JSP.

EL e Scriplets em JSP são dois contextos completamentes diferentes e o código tentando integrar os dois são horriveis e complicado.

A falta de uma maneira mais fácil de fazer Helpers no JSP é a causa de um monte de trechos de códigos JSP (utilizando c:if e c:chooses) que as pessoas ficam copiando-colando entre as páginas.

Agora, lembre-se que “Scriptlets” em Ruby não são iguais Scriptlets JSP.
São bem diferentes, para começar uma variável criada no controller é um variável no RHTML.

K

Thiagosc:
É o cúmulo do fanboyismo advogar o uso de “scriptlets”. Hahahahaha

Parece que a maioria dos que se mostram “pró Ruby hype” o fazem mais por medo de “perder o trem da história” do que por vantagens propriamente ditas.

O restante é formado por viciados em Spring que encontraram uma forma de fazer “wiring” sem precisar editar XML e acham que encontraram o “Santo Graal” da programação.

Já dissera anteriormente e mantenho que isso está muito parecido com hype de Linux: há mais de 10 anos que ele acabará com o Windows “a qualquer momento”, só que esse dia nunca chega.

SpringMVC delimita o controller, camada view você usa o que quiser, Velocity, JSTL etc…

Rails, falando mais do framework, realmente agrega uma excelente produtividade.

A produvidade com o Spring cai bastante, senti isso na pele nos meus últimos três projetos.

Talvez para projetos onde o mais importante seja o time-to-marketing,sem onerar a qualidade do trabalho final, Rails seja uma alternativa viável.

Estou estudando o mesmo, pois costumo mensurar meu esforço de desenvolvimento balisado em UCP - User Case Points e tenho uma média de produvitivade para resolução de um caso de uso.

Se eu conseguir a façanha de produzir o mesmo Caso de Uso 10x mais rápido, começa a ficar interessante.

Não é o trem da tecnologia que não quero perder e sim meu tempo, afinal a vida é mais que programar :slight_smile: :twisted:

K

Qual seu problema? Ninguem esta defendendo usar “scriptlets”. Ninguem tambem esta dizendo que Java deve ser substituido pelo Ruby/Rails. Sera que eh dificil analisar uma ideia sem se importar se ela foi implementada em A, B ou C, sem sentimentalismos em defender exclusivamente A? (hmm, qual a definicao de fanboy?)

Com relacao aos outros pontos…

Eu realmente nao entendo (sem ironias) como pode-se achar mais produtivo usar (e aprender, entender, testar, debugar) Java+JSP+tags+EL do que Java.

O fato eh que martelaram tanto as tags no mundo “Java para Web” que hoje ninguem se pergunta se isso realmente eh necessario e se realmente cumpre o papel a que se propoe. E ainda tem gente que gosta de balbuciar baboseiras como “lavagem cerebral” em relacao a outras tecnologias.

Sobre “helpers nao serem tags”, tambem nao entendi o ponto. Qual o problema? Apenas porque nao eh necessario escrever </tag>? Porque nao precisa fazer nada alem de escrever o codigo?

Sobre a bagagem de taglibs existentes. Concordo. Eh uma vantagem termos varias taglibs e alguem pode resistir a usar alguma outra abordagem (como Velocity p.ex.) se essas taglibs nao puderem ser usadas nessa outra abordagem. Mas isso nao eh inerente a tecnologia.

Marcio Kuchma

P

cv:

De novo, scriptlet so eh horrivel quando tem regra de negocio dentro.

Esse é o ponto chave: não misturar camadas. Acho irrelevante se vc vai fazer &lt% ou &lttag&gt ou seja lá que token for definido para se comunicar com a chamada a outra camada. O importante de manter é organizar.

T

Só uma coisa, basta especificar o nome da variável no EL, sem escopo, que ele encontra. Ou seja, que diferença há no que você disse? Com EL é ridiculamente fácil pegar objetos de qualquer escopo.

Acho que EL é muito bom e simples de se usar e as taglibs padrão são abstrações para o que já é feito em código, ou seja, qual a dificuldade de uma tag “if”?

Copias de trechos de código não é causado pelo JSP, mas sim pelo desenvolvedor que optou por fazê-lo. Nada o impede de criar diferentes JSPs com partes comuns e incluí-los na página principal.

T

O que eu disse foi em referência ao comportamento “dois pesoas, duas medidas” de alguns quando seus brinquedos favoritos estão sob fogo, pelo menos é o que aparenta.

A questão não é defender o Java ou o que seja, a questão é: será que não existe um pouco de exagero nessa história? Advogar o uso de scriptlets não é um pouco “abusar da boa vontade alheia”?

kuchma:
Eu realmente nao entendo (sem ironias) como pode-se achar mais produtivo usar (e aprender, entender, testar, debugar) Java+JSP+tags+EL do que Java.

O fato eh que martelaram tanto as tags no mundo “Java para Web” que hoje ninguem se pergunta se isso realmente eh necessario e se realmente cumpre o papel a que se propoe. E ainda tem gente que gosta de balbuciar baboseiras como “lavagem cerebral” em relacao a outras tecnologias.

Eu acho que usar scriptlets é regredir ao nível de PHP.

Uma das vantagens do Java, na minha opinião, é justamente facilitar uma boa organização do código, e isso é bom para manutenção. JSTL, EL e taglibs ajudam a uma componentização melhor.

J

Só uma coisa, basta especificar o nome da variável no EL, sem escopo, que ele encontra. Ou seja, que diferença há no que você disse? Com EL é ridiculamente fácil pegar objetos de qualquer escopo.

Acho que EL é muito bom e simples de se usar e as taglibs padrão são abstrações para o que já é feito em código, ou seja, qual a dificuldade de uma tag “if”?

Copias de trechos de código não é causado pelo JSP, mas sim pelo desenvolvedor que optou por fazê-lo. Nada o impede de criar diferentes JSPs com partes comuns e incluí-los na página principal.

Então os códigos seguintes são válidos em Java:

Controller

String teste = "Ola Mundo"; request.setAttribute("teste", teste);

JSP

Ou então:

JSP

<c:set var="xyz" value="Ola Mundo"/> <%= xyz %>

Eu estava justamente dizendo que Scriptlet ruby não é igual ao Scriptlet JSP. Existe uma integração entre o código ruby controller e o “scriptlet”. O scriptlet do ruby é a mistura do scriptlet JSP (você tem toda uma linguagem para usar) com o EL. Alias, EL é uma coisa natural em todo o Ruby.

E disse ainda que o único problema que vejo no uso do scriptlet JSP não é o código Java, mas sim essa falta de integração.

K

Sim, eh. Mas quem esta defendendo usar scriptlet?

Marcio Kuchma

S

Estou tentando aprender Ruby. Já li o livro Programming Ruby. Agora quero fazer um protótipo do Mentawai em Ruby (MentaOnRuby), com a finalidade de aprender mais Ruby para web.

Preciso de servlets, ruby server pages e tag libs (ou algo similar).

Tag lib já vi que tem, sem problemas.

Servlet parece que posso usar o Webrick. (não sei se esse Webrick possui forward)

Ruby server pages parece que é o erb.

Estou no caminho certo ?

Alguém gostaria de ajudar ?

(Só não respondam falando para eu usar RoR!)

T

Pera lá, quer dizer que scriptlets em Ruby é igual a taglibs + scriptlets + EL? Hahahaha. Tenho certeza que para programadores PHP tudo se resolve com scriptlets também, hahahaha!

Integração? Isso tudo faz parte do Java EE! Não consigo imaginar JSP sem EL e sem taglib, que “falta de integração” há nisso?

É o tal do negócio, nos dias de hoje se Java tem algo é porque é bloated, se não tem é porque é limitado. Fanboys de tudo que é linguagem se juntam para justificar o injustificável, até scriptlet em Ruby é lindo! hahahahaha

J

F

Com tags é facilmente representativo para designers e programadores de TELA!!!

Existem pontos que devem ser analisados para se usar ou não as tags, ao meu ver, substitui qualquer chamada a scriptlet.

Componentização para telas, reaproveitamento de código, legibilidade de programadores que estão acostumado a lidar com montagem e configuração de telas.

Com Tags a passagem de parâmetros é mais intuitiva, imagine um componente de tela, que o programador de tela precisa informar alguns atributos, com tags isso seria simples, fácil, claro, intuitivo, reaproveitável,… <tag:format att1=“a” att2=“b” att3=“3” … attn=“z” />

Com scriptlet, seria asqueroso <%= Helper.meleca (“a”,“b”,…“z” %>

Acho que toda linguagem que provê auxílio a web deveria possuir um mecanismo eficiente para construções de taglibs.

N

Olá alguem tem algum material de custom tags bem simples para iniciantes… estou procurando na net… e ainda não achei um bem simples

Abs

D

Pera lá, quer dizer que scriptlets em Ruby é igual a taglibs + scriptlets + EL? Hahahaha. Tenho certeza que para programadores PHP tudo se resolve com scriptlets também, hahahaha!

Integração? Isso tudo faz parte do Java EE! Não consigo imaginar JSP sem EL e sem taglib, que “falta de integração” há nisso?

É o tal do negócio, nos dias de hoje se Java tem algo é porque é bloated, se não tem é porque é limitado. Fanboys de tudo que é linguagem se juntam para justificar o injustificável, até scriptlet em Ruby é lindo! hahahahaha

Se você quiser ficar analisando SINTAXE, então é melhor acabar a discussão aqui. Mas, SEMANTICAMENTE, um Helper do RoR tem o mesmo papel de uma custom tag em Java EE. E é isso que estamos há 2 páginas discutindo. Se a SINTAXE não lhe agrada, questão de gosto pessoal, mas imaginar que todas as tecnologias devam seguir o “jeito Java/C#/Python/Ruby de ser” é de uma estupidez desmedida.

D

Sem querer tirar o mérito das custom tags, mas eu duvido que você consiga projetar uma interface DECENTE para uma tag que receba como parâmetro um varargs.

F

Daniel Quirino Oliveira:

Sem querer tirar o mérito das custom tags, mas eu duvido que você consiga projetar uma interface DECENTE para uma tag que receba como parâmetro um varargs.

Como assim Daniel ? Não entendi seu ponto de questionamento …
Em taglibs você pode receber qualquer objeto, logo pode receber um array de objetos que variam a depender da situação e trabalhar com elas dentro de uma classe Java normal (usar reflection, e o escambau!). Estou dizendo que fica mais com cara de componente, uma tag que tem determinados atributos que especificam o comportamento, e a manipulação desses atributos são de fácil uso por um programador que conheça muito javascript, css, html, dhtml, etc… E como em projetos grandes hoje em dia, algumas organizações contratam profissionais desse perfil para atuarem no desenvolvimento específico dessas telas. É por isso que Java abre oportunidades para pessoas atuarem em ramos específicos no desenvolvimento.

Agora para projetos pessoais, e quando você tem um pessoa responsável por fazer um módulo inteiro ou um sistema inteiro, acho que o esquema de programação proposta pelo RoR é mais vantajoso.

D

Fabrício Cozer Martins:
Daniel Quirino Oliveira:

Sem querer tirar o mérito das custom tags, mas eu duvido que você consiga projetar uma interface DECENTE para uma tag que receba como parâmetro um varargs.

Como assim Daniel ? Não entendi seu ponto de questionamento …
Em taglibs você pode receber qualquer objeto, logo pode receber um array de objetos que variam a depender da situação e trabalhar com elas dentro de uma classe Java normal (usar reflection, e o escambau!). Estou dizendo que fica mais com cara de componente, uma tag que tem determinados atributos que especificam o comportamento, e a manipulação desses atributos são de fácil uso por um programador que conheça muito javascript, css, html, dhtml, etc… E como em projetos grandes hoje em dia, algumas organizações contratam profissionais desse perfil para atuarem no desenvolvimento específico dessas telas. É por isso que Java abre oportunidades para pessoas atuarem em ramos específicos no desenvolvimento.

Agora para projetos pessoais, e quando você tem um pessoa responsável por fazer um módulo inteiro ou um sistema inteiro, acho que o esquema de programação proposta pelo RoR é mais vantajoso.

Não estou falando em array de objetos, estou falando em varargs mesmo (tudo bem, eu sei que no Java 5.0 varargs são tratados como se fossem arrays, mas a idéia por trás de varargs é bem mais poderosa do que isso).

Se você fosse tentar expressar a idéia de varargs em uma tag, você provavelmente teria que fazer algo assim:

&lt;x:y args="1, 2, Java, 0.2, AABBCC"/&gt;
&lt;x:y args="A, v, 0"/&gt;

A questão é que esta abordagem tem dois problemas:

  1. o que você está passando como parâmetro é, na verdade, uma STRING e não um conjunto de tamanho indeterminado de objetos.
  2. você vai precisar, em algum lugar, transformar esta string em uma lista.

Mas provavelmente você iria me falar: “Oras! Mas eu poderia montar um array e passá-lo como parâmetro para a minha tag!”. Mesmo? Então monte seu array de uma forma que seja legível e simples sem usar scriptlets :wink:

Não, não estou sugerindo para ninguém que scriptlets são melhores que custom tags! Só estou sugerindo para não serem imaturos em achar que apenas custom tags resolvem TODOS os problemas do mundo referentes a camada de apresentação em ambiente Web usando Java EE, pois, acredite, elas não resolvem (pelo menos não de uma maneira simples, legível e efetiva).

E é isso.

T

Daniel Quirino Oliveira:
&lt;x:y args="1, 2, Java, 0.2, AABBCC"/&gt; &lt;x:y args="A, v, 0"/&gt;

A questão é que esta abordagem tem dois problemas:

  1. o que você está passando como parâmetro é, na verdade, uma STRING e não um conjunto de tamanho indeterminado de objetos.
  2. você vai precisar, em algum lugar, transformar esta string em uma lista.

Mas provavelmente você iria me falar: “Oras! Mas eu poderia montar um array e passá-lo como parâmetro para a minha tag!”. Mesmo? Então monte seu array de uma forma que seja legível e simples sem usar scriptlets :wink:

Que tal esta maneira:

&lt;x:y args="${umArrayDeObjects}"/&gt;

Dessa forma é possível sim passar parâmetros diferentes de String. Mas agora você vai dizer que “EL não vale”. Lógico que vale, um JSP sem EL é um meio JSP, é um JSP de vários anos atrás! É como querer usar o JDK 1.2 como base de comparação.

Servlets + JSP + JSTL + EL, são como se fossem uma coisa só, e é muito fácil aprendê-las. E com certeza é melhor do que esses scriptlets PHP-like do Ruby.

L

Olá

Pensar assim é um grande erro. Servlet é uma tecnologia básica que deveria ser exigida com ênfase nas provas de programador Java pois é para ser usado com qualquer tipo de camada de apresentação. Conhecer Servlet é muito mais importante do que decorar as palavras chaves do Java ou entender a fundo os wildcards dos generics.

Um dos males dos atuais programadores Web é que aprendem JSP sem aprender Servlet e HTTP. É por isto que volta e meia alguém aqui no GUJ demonstra que não entende de sessions, filtros, cache HTTP, etc.

[]s
Luca

T

Luca:
Olá

Pensar assim é um grande erro. Servlet é uma tecnologia básica que deveria ser exigida com ênfase nas provas de programador Java pois é para ser usado com qualquer tipo de camada de apresentação. Conhecer Servlet é muito mais importante do que decorar as palavras chaves do Java ou entender a fundo os wildcards dos generics.

Concordo, mas na prática se usa tudo junto. Não se usa apenas uma coisa ou outra, pois essas tecnologias não são mutualmente exclusivas e tampouco coisas sem nenhuma conexão. Invariavelmente se acabará usando um pouco de cada.

A minha objeção quanto ao argumento do scriptlets Ruby é que alguns querem comparar scriptlets Ruby estritamente com scriplets JSP e ignorar todo o resto, ao invés de comparar as soluções para web disponíveis. Isso porque as soluções de Java são muito superiores aos scriptlets PHP-like do Ruby.

Chamar scriptlet de tag por falta de coisa melhor é o fim da picada. Os proponentes de Ruby se rebelaram e decidiram voltar para o século XX. Luditas.

D

Thiagosc:
Daniel Quirino Oliveira:
&lt;x:y args="1, 2, Java, 0.2, AABBCC"/&gt; &lt;x:y args="A, v, 0"/&gt;

A questão é que esta abordagem tem dois problemas:

  1. o que você está passando como parâmetro é, na verdade, uma STRING e não um conjunto de tamanho indeterminado de objetos.
  2. você vai precisar, em algum lugar, transformar esta string em uma lista.

Mas provavelmente você iria me falar: “Oras! Mas eu poderia montar um array e passá-lo como parâmetro para a minha tag!”. Mesmo? Então monte seu array de uma forma que seja legível e simples sem usar scriptlets :wink:

Que tal esta maneira:

&lt;x:y args="${umArrayDeObjects}"/&gt;

Dessa forma é possível sim passar parâmetros diferentes de String. Mas agora você vai dizer que “EL não vale”. Lógico que vale, um JSP sem EL é um meio JSP, é um JSP de vários anos atrás! É como querer usar o JDK 1.2 como base de comparação.

Servlets + JSP + JSTL + EL, são como se fossem uma coisa só, e é muito fácil aprendê-las. E com certeza é melhor do que esses scriptlets PHP-like do Ruby.

Eu entendi que a solução que o Fabrício sugeriu seria algo como o exemplo que você citou, Thiago, ou seja:

  1. você estaria passando um array de objetos como parâmetro para sua tag e não um conjunto de tamanho indeterminado de objetos;
  2. como você iria montar o tal array, considerando a hipótese que este array ainda não existe?
F

Daniel, tem algum exemplo real de uma situação que envolva esse problema que vc apresentou ?

D

Tenho, exatamente na aplicação que estou desenvolvendo atualmente (para um certo banco governamental). Não posso entrar muito em detalhes, mas é uma “tag ajax” responsável por fazer uma busca absurdamente ad-hoc baseado nos parâmetros que você lhe passar (quanto mais parâmetros, mais eficiente é a busca). Os objetos que passamos por parâmetro não vem “embrulhadinhos” em um array pronto para ser passado como parâmetro para a tag :frowning:

D

De ruby não sei nada, mas…

que tal para saber os tipos fazer algo no estilo de um printf?

tá, não é a coisa mais linda do mundo mas, se é pra não usar scriptlet não vejo outra alternativa agora…

E queria entender também o que o ser ali em cima tem contra php! Php é bom demais, o cara é louco… hehehe

Só pra não fugir mais do tópico, achei feio demais o ruby e sua sintaxe, sei lá, não estou acostumado…

Flw

D

dudaskank:
De ruby não sei nada, mas…

que tal para saber os tipos fazer algo no estilo de um printf?

tá, não é a coisa mais linda do mundo mas, se é pra não usar scriptlet não vejo outra alternativa agora…

Legal, uma idéia, mas e se você não for passar apenas Strings e números como parâmetro? :wink:

Mas, ok, não vamos ficar discutindo esta questão exaustivamente pois ela é infrutífera. O ponto a que eu gostaria de chegar é que não se pode “proibir” o uso de um recurso (scriptlets) em favor de outro (custom tags) para todas as situações. Vão existir situações que favorecem o uso de tags e outras em que um scriptlet vai ser necessário. O que é importante é:

  1. saber quando usar um ou outro
  2. saber quando NÃO usar uma solução e dar preferência a outra.
Criado 9 de agosto de 2006
Ultima resposta 17 de ago. de 2006
Respostas 52
Participantes 18