Frage

In JSP kann ich eine Bohne Eigenschaft verweisen, indem Sie den Tag mit $ {Object.property}

Gibt es irgendeine Art und Weise mit Eigenschaften zu beschäftigen, die nicht existieren könnten? Ich habe eine JSP-Seite, die mit verschiedenen Arten umgehen muss. Beispiel:

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

In JSP mag ich mit Spalten von Namen und das Gehalt eine Tabelle von Personen angezeigt werden soll. Wenn die Person nicht ein Mitarbeiter ist, dann sollte Gehalt leer sein. Die Zeile HTML könnte wie folgt aussehen:

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

Leider wenn Person nicht ein Mitarbeiter ist, dann kann es nicht Gehalt finden und ein Fehler auftritt. Wie würde ich dies in JSP lösen?

Edit: Gibt es ein instanceof Check-in JSP-Tag-Sprache

?
War es hilfreich?

Lösung

Verwenden Sie einfach den EL leer Operator, wenn es ein scoped Attribut war, leider werden Sie mit dem umliegenden Ihrem Ausdruck gehen müssen, um mit employee.salary mit :

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

Wenn Sie wirklich brauchen, instanceof , könnten Sie einen benutzerdefinierten Tag betrachten.

Andere Tipps

Wenn Sie die Klasse wollen, verwenden Sie einfach ${person.class}. Sie können auch ${person.class.name eq 'my.package.PersonClass'} verwenden

Sie können auch die "default" auf c:. Out

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

Kurz und bündig, aber nicht aktiviert.

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

Gibt es eine instanceof Check in JSP-Tag-Sprache?

Nicht im Moment des Schreibens dieses Artikels. Ich habe irgendwo gelesen, dass sie es reserviert haben, instanceof Stichwort, in EL, kann für Zukunft sein. Darüber hinaus gibt es eine Bibliothek zur Verfügung, die diesen spezifischen Tag hat. Schauen Sie in die vor der Entscheidung, einige benutzerdefinierte Tag für sich selbst zu erstellen. Hier ist der Link, Unstandard Tag Library .

Eine Methode wäre eine benutzerdefinierte Tag-Bibliothek zu erstellen und verwenden Polymorphismus innerhalb es um den Fall zu behandeln, in denen ein Person ist-a Employee.

Ich habe das nicht in einer Weile für JSP getan, aber häufig eine ähnliche Technik in GSP (Groovy / Grails Server Pages) verwenden.

Andernfalls könnten Sie eine gewisse Logik in der JSP setzen (nicht ideal) für Employee-ness zu testen:

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

Sie können immer ein Typ-Feld haben.

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

Ihre JSP würde so aussehen

<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>

Natürlich ist die Klasse Klasse bereits diese ...

<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>

Sie könnten auch `isEmployee ()‘ Methode haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top