1

私は実際にJSFから始めているので、簡単に行ってください。

Spring 3.x + Hibernate 4 + JSF 2.2 を混在させようとしています。以前はデスクトップ アプリケーションで Spring + Hibernate を混在させていましたが、それはまったく問題ではありませんでした。

しかし、今、私はここで少し混乱しています。私は注釈を介してマッピングしようとしていますが、それは混乱していると確信しています。

まず、これらすべてのテクノロジーを統合し、MVC パターンを維持するためのベスト プラクティスをお聞きしたいと思います。

そうは言っても、ここに私のファイルがあります:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>WebCD</display-name>
    <!-- Spring Config -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/Spring/context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
        <param-value>resources.application</param-value>
    </context-param>
    <listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
    </listener>
</web-app>

顔-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<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">

    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>

</faces-config>

AppMainController.java

@Controller
public class AppMainController {
@Autowired
    private CDDao                       cdDao;

    public List<CD> findAllCDs() throws SQLException {
        List<CD> cds = cdDao.findAll();
        return cds;
    }
}

CDDaoImpl.java

@Repository
public class CDDaoImpl extends Dao<CD> implements CDDao {

    @Override
    public Class<CD> getEntityClass() {
        return CD.class;
    }

}

そして、最後に *.xhtml ファイル:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:p="http://primefaces.org/ui">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>Lista de CDs</title>
</h:head>
<h:body>
    <center>
        <h1>Lista de CDS</h1>
    </center>
    <h:messages />
    <h:dataTable value="#{/*Right here I really don't know what to call*/.findAllCDs()}" var="cd"
        rules="rows" cellpadding="5">
        <f:facet name="caption">Essa é a lista de todos os CD's cadastrados no sistema</f:facet>
        <f:facet name="header">Lista de CD's</f:facet>
        <f:facet name="footer">Fim da Lista de CD's</f:facet>
        <h:column>
            <f:facet name="header">Código</f:facet>
#{cd.id}
</h:column>
        <h:column>
            <f:facet name="header">Descrição</f:facet>
#{cd.descricao}
</h:column>
        <h:column>
            <f:facet name="header">Gravadora</f:facet>
#{cd.fkLabel}
</h:column>
        <h:column>
            <f:facet name="header">Preço</f:facet>
#{cd.preco}
</h:column>
        <h:column>
            <f:facet name="header">Data Compra</f:facet>
#{cd.dataCompra}
</h:column>
        <h:column>
            <f:facet name="header">Data Gravação</f:facet>
#{cd.dataGravacao}
</h:column>
    </h:dataTable>
</h:body>
</html>

私はこれらのアプローチを試しました:

  • に追加@ManagedBean(name="ctrl")してAppMainController呼び出しますctrl.findAllCDs()
  • プロパティprivate List<CD> cdsとメソッド呼び出しcdDao.findAll()を作成して、リストに入力し、 dataTable に取得しますmyBean.cds

これらは次の例外でした。

  • NullPointerException: cdDao はいくつかの時点で null でした。これにより、唯一の論理的推論を検討することになります:cdDao注入されていません (Autowired)
  • @ManagedBean適切な場所にありませんでした..

私は本当に混乱しているので、ガイドライン、パスを教えていただければ幸いです。

4

1 に答える 1

0

とを交換@ManagedBeanしたら、問題は解決しました。@Named("name")@Autowired@Inject

于 2013-11-07T03:29:12.457 に答える