首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当条目为null时,如何使用使用Primefaces的三元操作符使用JSF来呈现特定文本?

当条目为null时,如何使用使用Primefaces的三元操作符使用JSF来呈现特定文本?
EN

Stack Overflow用户
提问于 2020-10-28 18:45:44
回答 1查看 333关注 0票数 0

我正在使用JSFPrimeFaces7.0来呈现一个xhtml文件,如果他的名字为null或空字符串,则显示用户(括号内的用户名),我希望只显示用户名而不带括号。

pom.xml:

代码语言:javascript
复制
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>7.0</version>
</dependency>
    <dependency>
    <groupId>org.primefaces.extensions</groupId>
    <artifactId>primefaces-extensions</artifactId>
    <version>7.0.3</version>
</dependency>

所以,现在这是我正确渲染的:

user.xhtml:

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:p="http://primefaces.org/ui"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core">

    User: #{userReport.selectedUser.name} (#{userReport.selectedUser.username})
</html>

呈现(在web浏览器中):

代码语言:javascript
复制
User: John Doe (jdoe)

但是,如果#{userReport.selectedUser.name}为null,则它在括号内呈现用户名:

代码语言:javascript
复制
User: (jdoe)

我需要它这样渲染(没有括号):

代码语言:javascript
复制
User: jdoe

尝试使用三元运算符? :

代码语言:javascript
复制
#{userReport.selectedUser.name ? userReport.selectedUser.name (#{userReport.selectedUser.username}) : #{userReport.selectedUser.username} }

这将导致以下堆栈跟踪:

代码语言:javascript
复制
javax.servlet.ServletException: The identifier [#] is not a valid Java identifier as required by section 1.19 of the EL specification (Identifier ::= Java language identifier). This check can be disabled by setting the system property org.apache.el.parser.SKIP_IDENTIFIER_CHECK to true.
    at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:749)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:475)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:111)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

使用以下方法解决了这个问题:

代码语言:javascript
复制
User:<c:choose>
         <c:when test="#{not empty userReport.selectedUser.name}">
             #{userReport.selectedUser.name} ({userReport.selectedUser.username})
          </c:when>
          <c:otherwise>
             #{userReport.selectedUser.username}
          </c:otherwise>
     </c:choose>

有更简单的方法吗?例如,使用三元? :运算符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 17:47:37

使用? :三元运算符和+=级联运算符使其工作:

代码语言:javascript
复制
User: #{!empty(userReport.selectedUser.name) ? userReport.selectedUser.name += ' (' += userReport.selectedUser.username += ')' : userReportView.selectedUser.username}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64579422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档