2008-09-16 6 views
23

J'ai une page JSP qui contient un scriplet où j'instancie un objet. Je voudrais passer cet objet à la balise JSP sans utiliser de cache.Comment puis-je transmettre un objet à une balise JSP?

Par exemple, je voudrais y arriver:

<%@ taglib prefix="wf" uri="JspCustomTag" %> 

<% 
Object myObject = new Object(); 
%> 

<wf:my-tag obj=myObject /> 

J'essaie d'éviter d'interagir directement avec l'une des caches (page, session, ServletContext), je préférerais avoir mon tag gérer cela.

+0

Remarque, je ne veux pas que mon objet converti en une chaîne et passée comme une chaîne, je veux que mon gestionnaire de balises pour avoir réellement accès à l'objet. –

+5

Vous souciez-vous de choisir la bonne réponse? –

+0

@RubensMariuzzo Tous sont mauvais. – peterh

Répondre

0

Utiliser un langage d'expression:

 
    <wf:my-tag obj="${myObject}" /> 
+0

Nous devons ajouter cela dans un certain contexte, avant de l'utiliser. –

+0

Il commence par sérialiser myObject, puis désérialise. Très mauvaise solution. – peterh

4

La syntaxe originale était de réutiliser '<% =%>'

Alors

<wf:my-tag obj="<%= myObject %>" /> 

Voir this part of the Sun Tag Library Tutorial un exemple

+0

Je me souviens de cela et l'homme est-il moche! +1 –

+0

Le lien est rompu. Voir la version Web Archive [ici] (http://web.archive.org/web/20090130012629/http://java.sun.com/products/jsp/tutorial/TagLibraries16.html). – Behrang

+0

Il commence par sérialiser myObject, puis désérialise. Très mauvaise solution. – peterh

2

Pour moi le langage d'expression ne fonctionne que si je rends cette variable accessible, en mettant par exemple dans le contexte de la page.

<% Object myObject = new Object(); 
    pageContext.setAttribute("myObject", myObject); 
%> 
<wf:my-tag obj="${myObject}" /> 

Sinon tas reçoit null.

Et <wf:my-tag obj="<%= myObject %>" /> fonctionne sans effort supplémentaire. De plus, <% =%> donne une validation de type jsp à la compilation, alors que El est validé uniquement en runtime.

+0

Utilisez la compilation JSP, vous obtiendrez l'erreur lors de la compilation. –

+0

Il commence par sérialiser myObject, puis désérialise. Très mauvaise solution. – peterh

10
<jsp:useBean id="myObject" class="java.lang.Object" scope="page" /> 
<wf:my-tag obj="${myObject}" /> 

Il n'est pas conseillé d'utiliser des Scriptlets dans la page JSP. Il tue le but d'un langage de modèle.

+0

Tout d'abord, la portée paginée est une très mauvaise chose. Deuxièmement: il sérialise d'abord myObject, puis désérialise. Cette solution est beaucoup plus difficile comme un simple scriptlet. – peterh

+2

1. Quel est le problème avec les haricots 'page'? 2. Il n'y a pas de sérialisation ici. Pourquoi pensez-vous cela? –

+0

Enfin, j'ai compris que vous avez raison, alors vous avez la prime. – peterh

36

Une question légèrement différente que j'ai cherché ici: "Comment passez-vous un objet à un fichier de balise?"

Réponse: Utilisez l'attribut « type » de la directive attribut:

<%@ attribute name="field" 
       required="true" 
       type="com.mycompany.MyClass" %> 

Le type defaults to java.lang.String, sans qu'il vous obtiendrez une erreur si vous essayez d'accéder à des champs d'objet disant qu'il ne peut pas trouver le champ de type String.

+1

Ce n'était pas la question, -1. – peterh

1

Vous pouvez utiliser « <% =%> » pour obtenir la valeur d'objet directement dans votre tag:

<wf:my-tag obj="<%= myObject %>"/> 

et pour obtenir la valeur d'une variable dans cet objet, vous pouvez obtenir que l'utilisation de « obj. paramètre » comme:

<wf:my-tag obj="<%= myObject.variableName %>"/> 
Questions connexes