gpt4 book ai didi

java - 从 JSP 标记文件访问托管 Bean

转载 作者:行者123 更新时间:2023-12-01 06:25:30 24 4
gpt4 key购买 nike

我有以下最小测试用例:

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}”直接放在 上方时,它就可以工作了 - 它显示“hello!”。对于这个简单的测试用例,这已经足够了,但当然我想要的是在更复杂的情况下使用我的 bean 中的值(例如在 f:selectItems 中)。

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

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

最佳答案

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

关于java - 从 JSP 标记文件访问托管 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com