jsp中的<c:if>语句无法正常工作</c:if>

时间:2011-01-20 18:37:12

标签: jsp jstl

我在JSP中声明如下:

     <% String fname = "abcd" %>

        <c:if test="${not empty fname}">
       <% out.println("not empty"+fname); %>
        </c:if> 

    <c:if test="${empty fname}">
    <% out.println(" empty"+fname); %>
    </c:if>

在它显示的页面中 - emptyabcd - &gt;意味着它会转到第二个if(非空),即使fname有值。知道为什么吗?

2 个答案:

答案 0 :(得分:5)

JSTL不读取scriptlet中定义的页面变量 - 这两个样式是分开的,不能很好地协同工作。

而不是

<% String fname = "abcd" %>

你需要这样的东西:

<c:set var="fname" value="abcd"/>

如果你必须使用scriptlet,那么你需要在JSTL读取之前将变量添加到页面上下文中:

<% 
   pageContext.setAttribute("fname", "abcd");
%>

答案 1 :(得分:0)

实际上我需要从会话中获取fname 我这样做 -
              &lt;%String fname =(String)request.getSession()。getAttribute((EnterpriseConstants.USER_FIRST_NAME));%&gt;

      <c:set var = "fname" value = "<%=request.getSession().getAttribute ((EnterpriseConstants.USER_FIRST_NAME))%>";/>

我需要在页面中显示的fname。如果我将第一个名称作为null或从会话中获取的空格,则用户可以输入它或者它将受到保护。所以我需要在显示页面之前检查一下。

             <c:if test="${not empty fname}">
<html:text name="form1" property="firstName" styleClass="formContent" value="<%=fname.toUpperCase()%>" style = "background:#C8C8C8"  readonly="true"  maxlength="15" size="10"/>            
</c:if>     
     <c:if test="${empty fname}">           
<html:text name="form1" property="firstName"   
      styleClass="formContent"  maxlength="15" size="10"/>
</c:if>
问题 - 1)我需要获取字符串的fname,然后做一个?如果我只是做一个var =“fname”,当我尝试在语句中使用这个变量时,它会给我错误。所以我必须首先将fname变为String fname。现在它正在运作。任何其他方式??