Java 属性的JSP bean标记可能不存在
在JSP中,我可以使用标记引用bean的属性 ${object.property} 是否有办法处理可能不存在的属性?我有一个JSP页面,需要处理不同的类型。例如:Java 属性的JSP bean标记可能不存在,java,jsp,jsp-tags,javabeans,Java,Jsp,Jsp Tags,Javabeans,在JSP中,我可以使用标记引用bean的属性 ${object.property} 是否有办法处理可能不存在的属性?我有一个JSP页面,需要处理不同的类型。例如: public class Person { public String getName() } public class Employee extends Person { public float getSalary() } 在JSP中,我想显示一个包含姓名和薪水列的人员表。如果此人不是员工,则工资应为空。行HTM
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中解决这个问题
编辑:是否有签入JSP标记语言的实例?您可以始终有一个类型字段
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>
当然班上已经有了这个
<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()'方法 一种方法是创建一个自定义标记库,并在其中使用多态性来处理
人员
是员工
的情况
我已经有一段时间没有为JSP做这项工作了,但经常在GSP(Groovy/Grails服务器页面)中使用类似的技术
否则,您可以在JSP
(不理想)中放入一些逻辑来测试员工的-ness:
<%
String salary
if (person instanceof Employee) {
salary = person.salary
} else {
salary = "" // or ' '
}
%>
<td><c:out value="${salary}"></td>
如果EL empty运算符是作用域属性,则只需使用它,不幸的是,您将不得不使用employee.salary来包围表达式:
如果你真的需要实例,你可以考虑一个自定义标签。
< P>如果你想要这个类,只要使用<代码> ${No.class }。您还可以使用${person.class.name eq'my.package.PersonClass'}
您还可以在c:out上使用“default”
<c:out value='${person.salary}' default="Null Value" />
简洁,但未选中
<tr>
<td>${person.name}</td>
<td>${person.class.simpleName == 'Employee' ? person.salary : ''}</td>
</tr>
${person.name}
${person.class.simpleName=='Employee'?person.salary:'}
JSP标记语言中是否有check实例
在写这篇文章的时候没有。我在某个地方读到他们已经保留了它,instanceof关键字,在EL中,可能是为了将来。此外,还有一个库具有此特定标记。在决定为自己创建一些自定义标记之前,请仔细研究一下。这里是链接 我知道有一个更简单的方法。。。啊!使用Tomcat 5.5,如果对象上的属性实际不存在(如上图所示),则会引发异常。已确认,如果此人没有salary属性,则此操作不起作用。对于我的粗心大意,我深表歉意。我不想这么说,但是你可能不得不用c:catch标签来做这个。我想知道一个${pageContext[“errorData”]
是否存在,而catch确实是防止空指针异常的唯一方法。我希望EL更好,但我们现在就在这里。这正是我想要的!我使用一个标记和类的simpleName属性,并且我可以显示我的每个子类的唯一字段。
<tr>
<td>${person.name}</td>
<td>${person.class.simpleName == 'Employee' ? person.salary : ''}</td>
</tr>