在JSP中,我可以使用标记来引用bean的属性 $ {object.property}

有没有办法处理可能不存在的属性?我有一个需要处理不同类型的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>

不幸的是,如果某人不是员工,那么就找不到薪水而且会发生错误。我如何在JSP中解决这个问题?

编辑:是否有 instanceof 检查JSP标记语言?

有帮助吗?

解决方案

如果它是一个范围属性,只需使用EL空操作符,不幸的是,您必须使用employee.salary与<!> lt; c:catch <!> gt;:

一起使用。
<c:catch var="err">
    <c:out value="${employee.salary}"/>
</c:catch>

如果您确实需要 instanceof ,则可以考虑自定义标记。

其他提示

如果您想要课程,只需使用${person.class}。您也可以使用${person.class.name eq 'my.package.PersonClass'}

你也可以使用<!> quot; default <!> quot;在c:out。

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

简洁但未经检查。

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

是否有JSP标记语言检查实例?

不是写这篇文章的那一刻。我在某地读过他们保留了它,EL中的 instanceof 关键字可能是为了将来。此外,还有一个具有此特定标签的库。在决定为自己创建一些自定义标记之前,请先查看。这是一个链接,非标准标签库

一种方法是创建自定义标记库并在其中使用多态来处理Person 是-a Employee的情况。

我暂时没有为JSP做过这个,但经常在GSP(Groovy / Grails Server Pages)中使用类似的技术。

否则,你可以在JSP(不理想)中加入一些逻辑来测试<=> - ness:

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

您可以随时拥有类型字段。

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()'方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top