私は実際に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
適切な場所にありませんでした..
私は本当に混乱しているので、ガイドライン、パスを教えていただければ幸いです。