我有以下最小测试用例:
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 /标签/ 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 /爪哇/ UserBean.java
@ManagedBean(name="userBean")
@SessionScoped
public class UserBean
{
public String getTest() { return "hello!"; }
}
现在我期望的是,当我通过浏览器访问not_working.jsp时,我会看到“你好!”。我所看到的除外是“#{userBean.test}”。也就是说,我在value属性中放入了文字EL表达式。现在,当我将“$ {userBean.test}”直接放在上面时,那个工作 - 它显示“你好!”。对于这个简单的测试用例,这就足够了,但当然我想要的是在更复杂的情况下使用我的bean中的值(例如在f:selectItems中)。
我所做的就是因为某些原因没有对延迟表达式的EL进行评估。我究竟做错了什么?如何根据标记文件中的JSF标记的值属性的要求使用延迟表达式?
我正在使用JSF 2.2(Mojarra 2.2.0)和Tomcat,如果这有任何区别的话。
答案 0 :(得分:0)
将方法显示为您需要在方法名称末尾指定括号的值。
使用<h:outputText value="#{userBean.test()}"/>.
Jsp会将其识别为方法并显示值
答案 1 :(得分:0)
我尝试了与你相同的代码,它的工作正常。 请参阅我的代码如下
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服务器。 希望这能解决你的问题
答案 2 :(得分:0)
尝试声明变量测试,看下面它应该工作....(通常你的托管bean类将有geters和setter)
@ManagedBean(name="userBean")
@SessionScoped
public class UserBean{
public String test = "hello!";
public String getTest() {
return test;
}
}