背景
我正在学习 Java,目前正在学习 JSF。我来自 ASP.NET MVC 背景,最近才接触到 Java 世界,所以要温柔 ;)
问题
我不太清楚如何将模型(属于List<T>
)放入 JSF 视图中。我最近学习 Struts 时所做的事情如下:
像这样创建了一个 Servlet:
@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 页面中不起作用。很公平,但是如何将集合传递给页面,以便可以在表格/网格中显示项目?
编辑
感谢 Sanjeevi.V,我可以看到我应该使用h:dataTable
标签。但是,它不显示数据。这是我的代码:
模型/管理 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>
我试图按照该教程进行操作,所以我不确定我哪里出错了。就个人而言,我不明白它是如何工作的.. EmployeeCollection bean 是如何连接起来的?是因为@SessionScoped
每个会话只有一个,所以会使用它吗?即便如此,在运行时,它还是一个空对象。我在这里想念什么?我怎样才能使这项工作?我确实在数据库中有行,所以不要问这个。:)