Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JSP标记文件访问托管bean_Java_Jsp_Jsf - Fatal编程技术网

Java 从JSP标记文件访问托管bean

Java 从JSP标记文件访问托管bean,java,jsp,jsf,Java,Jsp,Jsf,我有以下最小测试用例: 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> 现在我所期望的是,当我通过浏览器访问not_working.jsp时,我会看到“hello

我有以下最小测试用例:

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>
现在我所期望的是,当我通过浏览器访问not_working.jsp时,我会看到“hello!”。除了我看到的是“#{userBean.test}”。也就是说,我放在value属性中的文字EL表达式。现在,当我将“${userBean.test}”直接放在上面时,它工作了——它显示“hello!”。对于这个简单的测试用例,这就足够了,但我当然希望在更复杂的情况下使用bean中的值(例如在f:selectItems中)

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


我正在使用JSF2.2(Mojarra 2.2.0)和Tomcat,如果这有什么区别的话。

要将方法显示为值,需要在方法名称的末尾指定括号。 使用

Jsp会将其识别为方法并显示值

我已经尝试了与您相同的代码,它工作正常。 请参见下面的代码

package com.mycom.demo;
@ManagedBean
@SessionScoped
public class UserBean
{
    public String myString()
    {
          return "Hello";
    }
}
<%@ 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>
我的Html代码如下

package com.mycom.demo;
@ManagedBean
@SessionScoped
public class UserBean
{
    public String myString()
    {
          return "Hello";
    }
}
<%@ 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>

我已经介绍了JSF2.2.1、jstl JAR和tomcat服务器。
希望这将解决您的问题

尝试声明变量测试,请参见下面的内容它应该可以工作……(通常,托管bean类将有geter和setter)


谢谢,但是您也尝试过使用jsp标记吗?你的代码对我也适用,当我使用标记文件时,就像在我的示例中一样,它不起作用。我试过你的代码,我也遇到了同样的问题。我认为这是EL问题,因为jsp和jsf都有自己的EL evalutor。我想这与所使用的JSP和JSF组件之间的EL不同有关。把各种各样困难的事情堆在上面,让像这样的基本事情发挥作用,这似乎不是一个好办法。我已经切换到使用JSF模板,在那里它可以正常工作。谢谢您的时间。EL根本不需要评估。如果是,如果setters有问题,你会得到一个明确的错误。
@ManagedBean(name="userBean")
@SessionScoped
public class UserBean{
  public String test = "hello!";

  public String getTest() {
    return test; 
  }
}