6

JSP では、タグ ${object.property} を使用して Bean のプロパティを参照できます。

存在しない可能性のあるプロパティを処理する方法はありますか? さまざまなタイプを処理する必要がある JSP ページがあります。例:

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

JSP で、名前と給与の列を持つ人のテーブルを表示したいと考えています。個人が従業員でない場合、給与は空白にする必要があります。行の HTML は次のようになります。

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

残念ながら、 person が従業員でない場合、給与を見つけることができず、エラーが発生します。JSPでこれをどのように解決しますか?

編集: JSP タグ言語にinstanceofチェックはありますか?

4

5 に答える 5

7

範囲指定された属性である場合は、EL 空演算子 IF を使用するだけです。残念ながら、employee.salary を使用して式を <c:catch> で囲む必要があります。

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

本当にinstanceofが必要な場合は、カスタム タグを検討してください。

于 2008-10-31T20:11:55.397 に答える
4

クラスが必要な場合は、を使用して${person.class}ください。使用することもできます${person.class.name eq 'my.package.PersonClass'}

c:out で「デフォルト」を使用することもできます。

 <c:out value='${person.salary}' default="Null Value" />
于 2008-10-31T21:02:37.260 に答える
3

簡潔ですが、チェックされていません。

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

JSPタグ言語でのチェックのインスタンスはありますか?

この記事の執筆時点ではありません。私はどこかで彼らがそれを予約していることを読みました、ELのinstanceofキーワードは将来のためかもしれません。さらに、この特定のタグを持つ利用可能なライブラリがあります。自分用のカスタムタグを作成することを決定する前に、それを調べてください。これがリンク、非標準タグライブラリです。

于 2008-12-10T13:46:44.310 に答える
1

1 つの方法は、カスタム タグ ライブラリを作成し、その中でポリモーフィズムを使用して a Person is-a Employeeのケースを処理することです。

私はこれを JSP でしばらく行っていませんでしたが、GSP (Groovy/Grails Server Pages) で同様の手法を頻繁に使用しています。

JSPそれ以外の場合は、 (理想的ではない) にいくつかのロジックを入れて、 Employee-nessをテストすることができます。

<% 
   String salary
   if (person instanceof Employee) {
       salary = person.salary
   } else {
       salary = "" // or '&nbsp;'
   }
%>
<td><c:out value="${salary}"></td>
于 2008-10-31T20:05:55.453 に答える
0

いつでも 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()
}

あなたのJSPは次のよ​​うになります

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

もちろん、 Class クラスにはすでにこれがあります...

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

「isEmployee()」メソッドを使用することもできます。

于 2008-10-31T20:03:21.607 に答える