如何将自动弹簧服务转换为jsp?

FuS*_*SsA 4 jsp spring-mvc autowired

正如标题中所提到的,我需要在我的page.jsp中自动装配服务.." 我知道不建议这样做 "

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


<%@ page import="org.springframework.context.ApplicationContext"%>
<%@ page
    import="org.springframework.web.servlet.support.RequestContextUtils"%>

<%@ page import="com.fussa.fyby.service.Test"%>
<%@ page import="com.fussa.fyby.model.PIL_P_APPLCTN"%>


<%
    ApplicationContext ac = RequestContextUtils.getWebApplicationContext(request);
    Test s = (Test) ac.getBean("fussafyby");
    PIL_P_APPLCTN app = s.getByKey(13);
%>


<c:out value="azeerty"></c:out>

<c:out value="${ app.APPLCTN_CD }"></c:out>

<select name="listeGroupes" id="listeGroupes">

    <option value="123">123</option>

    <option value="${ app.APPLCTN_CD }">${ app.APPLCTN_CD }</option>
    <option value="123">${ s.afficher() }</option>

</select>
Run Code Online (Sandbox Code Playgroud)

我的服务:

@Component("fussafyby")
@Transactional
public class Test {

    @Autowired
    private SessionFactory sessionFactory;

    protected Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    public PIL_P_APPLCTN getByKey(int key) {
        return (PIL_P_APPLCTN) getSession().get(PIL_P_APPLCTN.class, key);
    }



    public String affiche() {
        return "FuSsA";
    }
}
Run Code Online (Sandbox Code Playgroud)

仅显示选择中的azeerty消息和123选项.

谢谢你的任何建议..

Ser*_*sta 5

您甚至不应该尝试这样做... JSP被转换为java源并由servlet容器编译为java类,并且Java EE规范没有说明它们的去向,因此您不能对它们进行弹簧扫描,因此注释是不是一种选择

更糟糕的是,JSP不能是Spring bean,因为它们是由应用程序上下文之外的servlet容器创建的,因此XML注入也无法工作.

甚至完整的AspectJ也无法使用,因为再一次你无法控制JSP类所在的位置,所以你甚至无法在它们上使用加载时织入器.

问题不在于"不建议这样做",而是JSP是由servlet容器管理的特殊类.您可以在scriplets中使用Java代码,但不能将它们作为普通的Java类进行管理.

顺便说一下,你是否认为在scriptlet中不推荐过多的Java代码有充分的理由?