使用c:set设置非字符串值

时间:2010-03-17 17:33:16

标签: jsf type-conversion jstl el

每当执行<c:set var="name" value="1"/>时,#{name}始终是#{name.class}所证明的字符串。

在JSF / Facelets上下文中是否有任何方法可以设置作为Integer或Long文字值的作用域属性?

2 个答案:

答案 0 :(得分:4)

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 :(得分:0)

在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}"
    />

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

其他优势:

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

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