バックグラウンド
私はJavaを学んでおり、現在JSFを使用しています。私はASP.NETMVCのバックグラウンドを持っており、最近Javaの世界に触れたばかりなので、優しくしてください;)
問題
List<T>
モデル(の)をJSFビューに取り込む方法がよくわかりません。最近Strutsを学んだときに私がしたことは、次のとおりです。
次のようなサーブレットを作成しました。
@WebServlet(name = "ViewProductsServlet", urlPatterns = {"/ViewProductsServlet"})
public class ViewProductsServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ProductRepository repository = new ProductRepository(); List<Product> model = repository.getAll(); request.setAttribute("model", model); request.getRequestDispatcher("/viewProducts.jsp").forward(request, response); }
次のような製品の表示ページにリンクされています。
<html:link forward="viewProducts" styleClass="btn btn-primary">View Products</html:link>
ビューでは、次のようなモデルを取得しました。
<% List<Product> model = (List<Product>)request.getAttribute("model"); %>
次に、JSTLタグが付いたアイテムを繰り返し処理しました。それが「正しい」方法であるかどうかはわかりませんが、機能しました。
今JSFのものについては、私は同様のアプローチをとろうとしていますが、<% %>
タグがxhtmlページで機能しないことに気づきました。十分に公平ですが、テーブル/グリッドにアイテムを表示できるように、コレクションをページに渡すにはどうすればよいですか?
編集
h:dataTable
Sanjeevi.Vのおかげで、タグを使用することになっていることがわかります。ただし、データは表示されていません。これが私のコードです:
モデル/Beanの管理:
@ManagedBean
@SessionScoped
public class EmployeeCollection {
private List<Employee> items;
public List<Employee> getItems() {
if (items == null) {
EmployeeRepository repository = new EmployeeRepository();
items = repository.getAll();
}
return items;
}
}
マークアップを表示:
<div class="container-fluid">
<div class="row-fluid">
<div class="span8 offset2">
<h:dataTable class="table table-striped" value="#{EmployeeCollection.items}" var="item">
<h:column>
<f:facet name="header">First Name</f:facet>
#{item.getFirstName()}
</h:column>
<h:column>
<f:facet name="header">Last Name</f:facet>
#{item.getLastName()}
</h:column>
<h:column>
<f:facet name="header">Date of Birth</f:facet>
#{item.getDateOfBirth().toString()}
</h:column>
</h:dataTable>
</div>
</div>
</div>
私はそのチュートリアルに従おうとしたので、どこが間違っているのかわかりません。個人的には、それがどのように機能するのかわかりません。EmployeeCollectionBeanはどのように接続されますか?@SessionScoped
セッションごとに1つしかないので、それを使用するからですか?それでも、実行時にはnullオブジェクトになります。ここで何が欠けていますか?どうすればこれを機能させることができますか?私は確かにデータベースに行を持っているので、それについて尋ねないでください。:)