gpt4 book ai didi

java - 集成 Spring Bean 和 JSP 标签

转载 作者:行者123 更新时间:2023-12-02 03:09:46 25 4
gpt4 key购买 nike

是否可以在 Spring 中以某种方式集成 Spring beans 和 JSP 标签。那就是使用 Spring bean 作为 JSP 标签?如果是这样,这是一个好/坏主意吗?所以这样的事情是可能的:

@Component
public class SomeBean extends SimpleTagSupport {

@Autowired
SomeBean someBean;

@Override
public void doTag() throws JspException, IOException {
getJspContext().getOut().write(someBean.doSomething());
}
}

我会在tags.tld中做什么来让它使用Spring bean而不是创建一个不会注入(inject)someBean的新实例?还是别的什么?

最佳答案

InternalResourceViewResolver 允许您使用exposition 将bean 导出到jsp 上下文中。例如,如果您想公开 Bean 列表,则应在 dispatcher-servlet.xml 中配置 View 解析器:

   ...
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="exposedContextBeanNames">
<list>
<value>someBean</value>
</list>
</property>
</bean>
...

其中 someBean 是您想要导出到 jsp 上下文的 bean 的名称。您甚至可以公开所有 spring beans:

   ...
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="exposeContextBeansAsAttributes" value="true"/>
</bean>
...

这允许您通过 bean 的名称从 jsp 上下文访问 spring bean。

假设您的标签处理程序如下所示:

package com.mytags;
public class SomeTag extends SimpleTagSupport {

private SomeBean bean;

@Override
public void doTag() throws JspException, IOException {
getJspContext().getOut().write(bean.doSomething());
}

public SomeBean getBean(){...}
public void setBean(SomeBean bean){...}
}

然后在 tld 中,您的标签将以如下方式描述:

...
<tag>
<name>someTag</name>
<tag-class>com.mytags.SomeTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>bean</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>com.mybeans.SomeBean</type>
</attribute>
</tag>
...

请注意,您必须将 rtexprvalue 指定为 true,因为您会将 bean 作为 EL 表达式传递到标记中。现在你可以在jsp中使用这个标签:

<%@ taglib prefix="mytags" uri="http://mytags.com" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<mytags:someTag bean="${someBean}"/>
</body>
</html>
<小时/>

但实际上直接从标签的处理程序访问 spring bean 并不是一个好主意。标签必须知道如何显示数据,但应该从如何获取这些数据中抽象出来。更好地准备您想要在 Controller 中显示的所有数据并将其作为模型传递给 jsp。

关于java - 集成 Spring Bean 和 JSP 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41234301/

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