2016-06-22 8 views
2

Wie im Titel erwähnt, ich brauche einen Dienst in meinem page.jsp autowire .. "ich weiß, dass es nicht empfehlenswert ist"Wie autuedired Feder Service in ein 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> 

Mein Service:

@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"; 
    } 
} 

Nur azeerty Nachricht und Option in der Auswahl werden .. gezeigt

Vielen Dank für irgendwelche Hinweise ..

+0

haben Sie meine Antwort überprüft verwenden kann? –

Antwort

4

Sie sollten nicht einmal versuchen, das zu tun ... JSP werden in Java-Quelle übersetzt und durch den Servlet-Container zu Java-Klassen kompiliert, und die Java EE-Spezifikation sagt nicht, wohin sie gehen, so dass Sie Spring Scan nicht haben können Sie sind also keine Annotation

Schlimmer noch, die JSP kann Spring Beans nicht sein, da sie von dem Servlet-Container außerhalb des Anwendungskontexts erstellt werden, so XML-Injektion kann nicht funktionieren.

Und sogar volle AspectJ kann nicht verwendet werden, weil Sie wiederum keine Kontrolle darüber haben, wo JSP-Klassen liegen, so dass Sie nicht einmal einen Ladezeit-Weber auf ihnen verwenden können.

Das Problem ist nicht, dass "das ist nicht empfehlenswert, es zu tun", es ist, dass JSP spezielle Klassen sind, die von dem Servlet-Container verwaltet werden. Sie können Java-Code in Skripts verwenden, aber Sie können sie nicht als normale Java-Klassen verwalten.

BTW, und im Allgemeinen, denken Sie nicht, dass es gute Gründe dafür geben kann, nicht zu viel Java-Code in Scriptlets zu empfehlen?

+1

Ich stimme völlig mit dir (y) .. – FuSsA

0

Ich denke, Sie dürfen @Autowired Annotation in der JSP nicht verwenden. Aber Sie haben eine Support-Klasse verwendet. Ich kann Ihnen mit diesen Lösungen helfen:
Lösung 1:
wenn Sie verwenden Spring MVC,
nur einfach Ihren Pass Dienst an den JSP Modeland verwenden.
Beispiel:

Angenommen, Sie haben Controller:

@Controller 
public void TestController{ 

    @Autowired 
    private TestService tService; 

    @RequestMapping("someURL") 
    public ModelAndView displayPage{ 
    //do some stuff 
    return new ModelAndView("myView").addObject("tService",tService); 
    } 
} 

JSP:

<html> 
... 
${tService.myMethodIWantToUse(..)} 
... 
</html> 



Lösung 2:
Verwenden Application in Ihrem JSP jede Bohne zuzugreifen wie dieses

Beispiel:

@Component("tsc") 
public void TestServiceClass{ 
//Your code goes here 
} 

Innere JSP:

ApplicationContext aC = RequestContextUtils.getWebApplicationContext(request); 
TestServiceClass tsc1 = (TestServiceClass) aC.getBean("tsc"); 
//Code to access your service Classes methods. 

Hoffe, das wird helfen.

+0

Beitrag aktualisiert ... – FuSsA

+0

@FuSsA hast du meine Antwort überprüft –

+0

ich versuchte Lösung 2 .. ich den Code aktualisieren – FuSsA

0

Sie wollen von JPS Seite rechten Feder Service-Methode anrufen? .. einfach unten Schritte ausgeführt haben, es funktionierte für mich ...

Angenommen, Sie AnimalService Klasse zugreifen möchten.

Schritt 1:

AbstractApplicationContext appContext = new AnnotationConfigApplicationContext(AnimalService.class); 

wenn Ihr AnimalService auf eine andere Klasse abhängig ist sagen wir mal FoodService ..then Schritt 1 sollte wie unten sein ..

AbstractApplicationContext appContext = new AnnotationConfigApplicationContext(AnimalService.class,FoodService.class); 

kurz gesagt, müssen Sie alle um Ihre abhängige Klassen dort.

Schritt 2:

AnimalService animalservice = appContext.getBean(AnimalService.class); 
animalservice.yourMethod(); 
0

Innen jsp:

TestService testService = ApplicationContextProvider.getApplicationContext().getBean(TestService.class); 
testService.testMethod(); 

Sie auch String Parameter (Servicename) für getBean() Methode