2012-05-15 43 views
0

如果我需要在JSF ManagedBean中注入Spring依賴項(通過Annotations創建),我使用的是Spring 2.0,它不支持@Autowire。在JSF中注入Spring依賴項使用Spring 2.0管理的bean

如果我保留@ManagedBean註釋,是否有任何注入依賴項的方式?

我使用的Myfaces 2.1.6通過eclipse與Jetty運行它。

請建議。

faces-config.xml中

<?xml version="1.0"?> 
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
    <navigation-rule> 
     <description>Navigation from the hello page.</description> 
     <from-view-id>/login.xhtml</from-view-id> 
     <navigation-case> 
      <from-outcome>success</from-outcome> 
      <to-view-id>/wsListing.xhtml</to-view-id> 
      <redirect /> 
     </navigation-case> 
    </navigation-rule> 
    <navigation-rule> 
     <description>Navigation from the hello page.</description> 
     <from-view-id>/wsListing.xhtml</from-view-id> 
     <navigation-case> 
      <from-outcome>abcService</from-outcome> 
      <to-view-id>/abcinput.xhtml</to-view-id> 
      <redirect /> 
     </navigation-case> 
     <navigation-case> 
      <from-outcome>filterAbc</from-outcome> 
      <to-view-id>/filterabcinput.xhtml</to-view-id> 
      <redirect /> 
     </navigation-case> 
    </navigation-rule> 


    <navigation-rule> 
     <description>Navigation from the hello page.</description> 
     <from-view-id>/abcinput.xhtml</from-view-id> 
     <navigation-case> 
      <from-outcome>success</from-outcome> 
      <to-view-id>/abcoutput.xhtml</to-view-id> 
      <redirect /> 
     </navigation-case> 
    </navigation-rule> 
    <application> 
     <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver> 
     <locale-config> 
      <default-locale>en</default-locale> 
      <supported-locale>en</supported-locale> 
      <supported-locale>es</supported-locale> 
     </locale-config> 
     <message-bundle>messages</message-bundle> 
    </application> 
</faces-config> 

WsListingBean.java

package com.example.ws.ui; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 


@ManagedBean(name="wsListingBean") 
@RequestScoped 
public class WsListingBean { 
    //want to inject some property here through spring injection 

    private String webServiceId; 

    public String getWebServiceId() { 
     return webServiceId; 
    } 

    public void setWebServiceId(String webServiceId) { 
     this.webServiceId = webServiceId; 
    } 

    public String action() 
    { 
     return this.webServiceId; 
    } 

} 

wsListing.xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" xmlns:lang="en"> 



<h:head> 
<meta charset="utf-8"/> 
<title>Web Service Listing</title> 
<link href="../resources/css/abc-style.css" rel="stylesheet" type="text/css" media="screen" /> 
</h:head> 

<h:body class="login-body"> 
<!-- start main container --> 
<div id="nb-login-container"> 
    <!-- start header --> 
    <div id="content-header"> 
    <div class="logo"><a href="#"><img src="../resources/images/abc_logo.png" alt="Logo abc" /></a></div> 
    </div> 
    <!-- end header --> 



    <!-- start content container --> 
    <!-- start content main --> 
    <div id="content-login"> 
    <div class="content-main-body"> 


    <div id="table-container"> 
     <h2>Web Services</h2> 
     <h:form> 
      <table width="100%" class="list-table"> 
      <tbody><tr> 
       <th width="20%">Name</th> 
       <th width="80">Description</th> 
       </tr> 
      <tr> 
       <td><h:commandLink value="First Web Service" action="#{wsListingBean.action}"><f:setPropertyActionListener target="#{wsListingBean.webServiceId}" value="abcService" /></h:commandLink></td> 
       <td> 
       Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae. 
       </td> 
       </tr> 
      <tr class="odd-row"> 
       <td><a href="#">Web Services 2</a></td> 
       <td>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</td> 
       </tr> 
      <tr> 
       <td><a href="#">Web Services 3</a></td> 
       <td>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident. similique sunt in culpa qui officia deserunt.</td> 
       </tr> 
      <tr class="odd-row"> 
       <td><a href="#">Web Services 4</a></td> 
       <td>Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus.</td> 
       </tr> 
      <tr> 
       <td><a href="#">Web Services 5</a></td> 
       <td>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae.</td> 
       </tr> 
      <tr class="odd-row"> 
       <td><a href="#">Web Services 6</a></td> 
       <td> Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</td> 
       </tr> 
      <tr> 
       <td><a href="#">Web Services 7</a></td> 
       <td>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident. similique sunt in culpa qui officia deserunt.</td> 
       </tr> 
      <tr class="odd-row"> 
       <td><a href="#">Web Services 8</a></td> 
       <td>Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus.</td> 
       </tr> 
      <tr> 
       <td><a href="#">Web Services 9</a></td> 
       <td>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae.</td> 
       </tr> 
      </tbody></table> 
      </h:form> 
     </div> 


    </div> 
    </div> 
    <!-- end content main --> 
    <!-- end content container --> 
</div> 
<!-- end main container --> 
</h:body> 

</html> 

回答

0

如果我可以在這裏看到正確的事,然後
如果u可以讀取你的錯誤仔細,它說,標識wslistingBean resolved to null
在這裏,你想訪問bean命名wsListingBean而是介於您錯誤(這裏L是小寫字母),輸入wslistingBean
因此,請檢查您在輸入錯誤的位置。
和managedBean沒有必要把bean的名字,如果你只是改變第一個字母的小象 -

@ManagedBean(name="wsListingBean") 
@RequestScoped 
public class WsListingBean {} 

對於這類它將自動wsListingBean豆的名字。
所以ü可以寫的一樣 -

@ManagedBean 
@RequestScoped 
public class WsListingBean {} 

這是同一個。

希望它澄清你的疑問......

+0

我想你已經改變了你的問題親愛的.. 。 – Addicted

0

這應該是一個變通方法來加載bean屬性在@PostConstruct

@Postconstruct 
private void initTheBean(){ 
webServiceId=resolveValue("#{springbeanname}",String.class); 
} 

public static <T> T resolveValue(String inputValueExpression, 
       Class<T> outputClass) { 
      FacesContext context = FacesContext.getCurrentInstance(); 

      ELContext elContext = context.getELContext(); 

      ValueExpression expression = context 
        .getApplication() 
        .getExpressionFactory() 
        .createValueExpression(elContext, inputValueExpression, 
          outputClass); 

      return (T) expression.getValue(elContext); 
     }