JSTL调用的方法不是setter或getter

时间:2013-12-12 07:37:51

标签: java jsp jstl jsp-tags

我在课堂上有这些方法:

 public HarfDate getHarfTo() {
        return to;
      }

我只是想知道如何在JSTL中调​​用它,因为我试图这样称呼它:

${exam.getHarfTo()}

但它不起作用!!

注意:考试是包含这些方法的类的实例

    如果解决方案是使方法静态,则
  • to不是类中的静态成员

3 个答案:

答案 0 :(得分:8)

exam对象的实例必须位于EL范围内,例如pageScope。假设在pageScope中将exam对象引用称为“检查”,则以下EL将调用getHarfTo方法:

   ${exam.harfTo}

注意:您无法调用setter方法。

为了扩展上面的内容(仅作为示例),我们可以使用scriptlet在exam中设置pageScope实例(请注意,不建议使用scriptlet这只是一个澄清的示例)< / p>

    <%
        com.example.Exam exam = new com.example.Exam();
        pageContext.setAttribute("exam", exam, PageContext.PAGE_SCOPE);
    %>

现在我们可以通过EL访问考试对象:$ {exam.harfTo}

可以将考试对象添加到其他范围,例如请求范围和会话范围。

Scriptlets和EL

   <%
        java.util.ArrayList cities = new java.util.ArrayList();
        cities.add("NYC");
        cities.add("SFO");
   %>

EL无法直接访问在scriptlet中创建的变量。因此,cities变量不能用于JSTL标记。

为此,我们首先需要将其放在某个范围内。例如:

    <%
        java.util.ArrayList cities = new java.util.ArrayList();
        cities.add("NYC");
        cities.add("SFO");
        pageContext.setAttribute("cities", cities, PageContext.PAGE_SCOPE);
    %>

这使得city引用的对象变量,pageScope中的“城市”名称可用。

    <select name="Cities">
           <c:forEach var="city" items ="${cities}">
                  <option> ${city}</option>
           </c:forEach>
    </select>

现在可以访问cities变量。 您不能将scriptlet作为EL表达式的属性。

    <select name="Cities">
           <%for(int i = 0; i < cities.size(); i++) {%>
           <option>${cities[<%=i%>]}</option>
           <%}%>
    </select>

如果考试类符合bean惯例,您可以使用标准操作

    <jsp:useBean id="exam" class="com.example.Exam" scope="pageScope"/>
    The value return by the method called harfTo: <jsp:getProperty name="exam" property="harfTo"/>

别忘了导入JSTL标签lib:

   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix ="c" %>

编辑:

如果你有一个包含exams个对象的集合exam,那么你可以使用JSTL迭代那样的集合,如下所示:

 <c:forEach var="exam" items ="${exams}">
         ${exam.harfTo}
 </c:forEach>

答案 1 :(得分:1)

您需要TLD来执行您的预期。

This链接有一个非常精细的例子。

HTH

答案 2 :(得分:-1)

要访问该方法,您只需剥离获取部分。

${exam.harfTo}

如果你想调用类的setter方法,那么同样有用。