1

我有以下最小测试用例:

not_working.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:not_working_tag>
  Hello
</t:not_working_tag>

WEB-INF/tags/not_working_tag.tag

<%@tag description="Main page template" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head></head>
  <f:view>
    <h:outputText value="#{userBean.test}"/>
    <jsp:doBody/>
  </f:view>
</html>

src/java/UserBean.java

@ManagedBean(name="userBean")
@SessionScoped
public class UserBean
{
  public String getTest() { return "hello!"; }
}

现在我期望的是,当我通过浏览器访问 not_working.jsp 时,我会看到“hello!”。除了我看到的是“#{userBean.test}”。也就是我在value属性中放入的文字EL表达式。现在,当我将 "${userBean.test}" 直接放在 . 对于这个简单的测试用例,这就足够了,但是我当然想要在更复杂的情况下(例如在 f:selectItems 中)使用来自我的 bean 的值。

我从这一切中得出的结论是,由于某种原因,延迟表达式的 EL 没有被评估。我究竟做错了什么?如何从标记文件中使用 JSF 标记的值属性中需要的延迟表达式?

我正在使用 JSF 2.2 (Mojarra 2.2.0) 和 Tomcat,如果这有什么不同的话。

4

3 回答 3

-1

我已经尝试过与您相同的代码,它工作正常。看我的代码如下

package com.mycom.demo;
@ManagedBean
@SessionScoped
public class UserBean
{
    public String myString()
    {
          return "Hello";
    }
}

我的HTML代码如下

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<f:view>
<h:outputText value="#{userBean.myString()}" />
</f:view>
</body>
</html>

我已经包含了 JSF 2.2.1、jstl jars 和 tomcat 服务器。希望这能解决你的问题

于 2013-08-07T16:00:07.667 回答
-1

要将方法显示为值,您需要在方法名称的末尾指定括号。使用<h:outputText value="#{userBean.test()}"/>. Jsp 会将其识别为方法并显示值

于 2013-08-07T13:19:04.477 回答
-1

尝试声明变量测试,见下文它应该工作....(通常你的托管bean类将有geters和setter)

@ManagedBean(name="userBean")
@SessionScoped
public class UserBean{
  public String test = "hello!";

  public String getTest() {
    return test; 
  }
}
于 2016-05-24T14:01:25.743 回答