【问题标题】:Use c:set to set a non-string value使用 c:set 设置非字符串值
【发布时间】:2011-01-28 16:44:58
【问题描述】:

无论何时执行<c:set var="name" value="1"/>#{name} 始终是一个字符串,正如#{name.class} 所证明的那样。

有没有办法在 JSF/Facelets 上下文中设置一个范围属性,它是整数或长文本值?

【问题讨论】:

    标签: jsf type-conversion jstl el


    【解决方案1】:

    在 JSF xhtml 页面上,我使用技术来减少要输入的字符数!

    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:p="http://primefaces.org/ui"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:c="http://java.sun.com/jsp/jstl/core"
          >
    
        <!-- JSF ViewController of this page -->
        <c:set var="vC" value="#{optionsViewController}"/> 
    ...
        <h:outputText 
            value="#{vC.txtOriginator.value}"  
            rendered="#{vC.txtOriginator.protected}"
            />
    

    而不是

    <h:outputText 
        value="#{optionsViewController.txtOriginator.value}"  
        rendered="#{optionsViewController.txtOriginator.protected}"
        />
    

    我没有输入超过 100 种类型的 optionsViewController,而是在我的 xhtml 文件开头编写了一次只定义 vC JSTL 变量,并在每次使用 optionsViewController 时使用它。

    其他优势:

    1. xhtml 代码更短,更易读。

    2. 当我使用粘贴/复制复制一些代码行时 xhtml 页面,vC 变量不得替换!

    【讨论】:

      【解决方案2】:

      EL 具有自动类型转换。这个article 有一些很好的信息。但是,缺点是您不应该在意。只要 param.month 实际上是一个整数,您就应该能够执行以下操作。

      <c:set var="myInteger" value="${param.month}"/>
      <p>
      The value of myInteger is:<c:out value="${myInteger}"/>
      Perform a multiplication operation to show that the type is correct:
      <c:out value="${myInteger *2}"/>
      

      【讨论】:

      • +1 尽管我更正了您错误地将其称为 JSTL 而不是 EL。 JSTL 是一个标签库,如此处java.sun.com/products/jsp/jstl/1.1/docs/tlddocs 所述,EL 是那些${} 在此 JSP/EL 规范中所述的东西:jsp.dev.java.net/spec/jsp-2_1-fr-spec-el.pdf
      • 啊,我只需要使用表达式而不是文字,所以如果我使用 value="#{1}" 那么它会很长。我仍然不喜欢你无法控制它是 long 还是 int。
      • 谢谢,只是一个错字。我的错。我离开 Java 已经有一段时间了。
      • @GreenieMeanie:这是 EL 的本质,通常不应该造成伤害。如果您想要类型安全,请改用 JSF 组件。如果它有麻烦,问一个新问题它是如何伤害的,然后我们将提供解决方案/解决方法。顺便说一句,在 JSF 中使用 JSTL 并不总是一种好的做法。
      • @Balus:整个 JSP/JSF/EL/JSTL/Facelets 都是一团糟,现在很难跟踪确切的条款和版本......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多