如标题中所述,我需要在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"
“我知道不建议这样做”
<%@ 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>
我的服务:
@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"; } }
仅显示选择中的azeerty消息和123选项.
谢谢你的任何建议..
你甚至不应该尝试这样做……JSP被转换为java源代码并由servlet容器编译为java类,Java EE规范没有说明它们去哪里,所以你不能对它们进行弹簧扫描,因此注释不是一个选项
更糟糕的是,JSP不能是Spring bean,因为它们是由应用程序上下文之外的servlet容器创建的,因此XML注入也无法工作.
甚至完整的AspectJ也无法使用,因为再一次你无法控制JSP类所在的位置,所以你甚至无法在它们上使用加载时织入器.
问题不在于“不建议这样做”,而是JSP是由servlet容器管理的特殊类.您可以在scriplet中使用Java代码,但不能将它们作为普通的Java类进行管理.
顺便说一下,你是否认为在scriptlet中不推荐过多的Java代码有充分的理由?