可能不存在的属性的 JSP bean 标记
在 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 中解决这个问题?
编辑: JSP 标记语言中是否有 instanceof 检查?
In JSP I can reference a bean's property by using the tag
${object.property}
Is there some way to deal with properties that might not exist? I have a JSP page that needs to deal with different types. Example:
public class Person {
public String getName()
}
public class Employee extends Person {
public float getSalary()
}
In JSP I want to display a table of people with columns of name and salary. If the person is not an employee then salary should be blank. The row HTML might look like:
<tr>
<td><c:out value="${person.name}"></td>
<td><c:out value="${person.salary}"></td>
</tr>
Unfortunately if person is not an employee then it can't find salary and an error occurs. How would I solve this in JSP?
Edit: Is there an instanceof check in JSP tag language?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
只需使用 EL 空运算符 IF 它是一个作用域属性,不幸的是,您必须使用带有的employee.salary 来包围您的表达式:
如果您确实需要instanceof,那么您可能会考虑自定义标签。
Just use the EL empty operator IF it was a scoped attribute, unfortunately you'll have to go with surrounding your expression using employee.salary with <c:catch>:
If you really need instanceof, you might consider a custom tag.
如果您想要该类,只需使用
${person.class}
即可。 您还可以使用${person.class.name eq 'my.package.PersonClass'}
您还可以在 c:out 上使用“默认”。
If you want the class, just use
${person.class}
. You can also use${person.class.name eq 'my.package.PersonClass'}
You can also use the "default" on c:out.
简洁,但未经检查。
目前还没有。 我在某处读到他们在 EL 中保留了它,instanceof 关键字,可能是为了将来。 此外,还有一个具有此特定标签的库。 在决定为自己创建一些自定义标签之前,请先研究一下这一点。 这是链接,非标准标签库。
Concise, but unchecked.
Not at the moment of this writing. I read somewhere that they have reserved it, instanceof keyword, in EL, may be for future. Moreover, there is a library available that has this specific tag. Look into that before deciding to create some custom tag for yourself. Here is the link, Unstandard Tag Library.
一种方法是创建一个自定义标签库,并在其中使用多态性来处理
Person
is-aEmployee
的情况。我已经有一段时间没有在 JSP 中这样做了,但经常在 GSP(Groovy/Grails Server Pages)中使用类似的技术。
否则,您可以在
JSP
中放置一些逻辑(不理想)来测试Employee
状态:One method would be to create a custom tag library and use polymorphism within it to handle the case where a
Person
is-aEmployee
.I haven't done this in a while for JSP, but frequently use a similar technique in GSP (Groovy/Grails Server Pages).
Otherwise, you could put some logic in the
JSP
(not ideal) to test forEmployee
-ness:你总是可以有一个类型字段。
你的 JSP 看起来像
当然 Class 类已经有这个...
你也可以有 `isEmployee()' 方法。
You could always have a type field.
Your JSP would look like
Of course the Class class already has this...
You could also have `isEmployee()' method.