Question

Dans JSP, je peux référencer la propriété d'un bean en utilisant la balise $ {object.property}

Existe-t-il un moyen de gérer des propriétés qui pourraient ne pas exister? J'ai une page JSP qui doit traiter de différents types. Exemple:

public class Person {
    public String getName()
}
public class Employee extends Person {
    public float getSalary()
}

Dans JSP, je souhaite afficher un tableau de personnes avec des colonnes de nom et de salaire. Si la personne n'est pas un employé, le salaire doit être vide. La ligne HTML pourrait ressembler à:

<tr>
    <td><c:out value="${person.name}"></td>
    <td><c:out value="${person.salary}"></td>
</tr>

Malheureusement, si la personne n’est pas un employé, elle ne peut pas trouver de salaire et une erreur se produit. Comment pourrais-je résoudre ce problème dans JSP?

Modifier: existe-t-il une instance de contrôle dans la langue des balises JSP?

Était-ce utile?

La solution

Utilisez simplement l'opérateur EL vide SI c'était un attribut scoped. Malheureusement, vous devrez entourer votre expression en utilisant employee.salary avec < c: catch >:

<c:catch var="err">
    <c:out value="${employee.salary}"/>
</c:catch>

Si vous avez vraiment besoin de instance de , vous pouvez envisager une balise personnalisée.

Autres conseils

Si vous voulez la classe, utilisez simplement ${person.class}. Vous pouvez également utiliser ${person.class.name eq 'my.package.PersonClass'}

Vous pouvez également utiliser le " défaut " on c: out.

 <c:out value='${person.salary}' default="Null Value" />

Concis, mais décoché.

<tr>
    <td>${person.name}</td>    
    <td>${person.class.simpleName == 'Employee' ? person.salary : ''}</td>
</tr>
  

Existe-t-il une instance de vérification en langage de balise JSP?

Pas au moment d'écrire ces lignes. J'ai lu quelque part qu'ils l'avaient réservé. Le mot clé instanceof , dans EL, pourrait être pour l'avenir. De plus, il existe une bibliothèque contenant cette balise spécifique. Examinez cela avant de décider de créer une balise personnalisée pour vous-même. Voici le lien, Bibliothèque de balises non standard .

Une méthode consisterait à créer une bibliothèque de balises personnalisée et à y utiliser un polymorphisme pour gérer le cas où un Person est un Employee.

Je n'ai pas fait cela depuis longtemps pour JSP, mais j'utilise fréquemment une technique similaire dans GSP (Groovy / Grails Server Pages).

Sinon, vous pourriez insérer une certaine logique dans JSP (pas idéal) pour tester <=> - ness:

<% 
   String salary
   if (person instanceof Employee) {
       salary = person.salary
   } else {
       salary = "" // or '&nbsp;'
   }
%>
<td><c:out value="${salary}"></td>

Vous pouvez toujours avoir un champ de type.

public class Person {
    public String getType() { return "Person"; }
    public String getName()
}
public class Employee extends Person {
    public String getType() { return "Employee"; }
    public float getSalary()
}

Votre JSP ressemblerait à

<tr>
    <td><c:out value="${person.name}"></td>
    <td><c:if test="'Employee' eq person.type"><c:out value="${person.salary}"></c:if></td>
</tr>

Bien sûr, la classe a déjà ceci ...

<tr>
    <td><c:out value="${person.name}"></td>
    <td><c:if test="'Employee' eq person.class.simpleName"><c:out value="${person.salary}"></c:if></td>
</tr>

Vous pourriez aussi avoir la méthode `isEmployee () '.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top