背景
我正在学习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
标签。但是,它不显示数据。这是我的代码:
MODEL / Manage 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
每个会话只有一个,所以会使用它吗?即便如此,在运行时,它将是一个空对象。我在这里错过了什么?我怎样才能做到这一点?我确实在数据库中有行,所以不要问这个。 :)
答案 0 :(得分:2)
value="#{EmployeeCollection.items}"
camelcase开始小尝试
value="#{employeeCollection.items}"
答案 1 :(得分:1)
请尝试以下代码
Managed Bean:
@ManagedBean(name = "bean")
@SessionScoped
public class Bean {
private List<Integer> numList;
public List<Integer> getNumList() {
return numList;
}
public void setNumList(List<Integer> numList) {
this.numList = numList;
}
public Bean() {
numList=new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
numList.add((int)(Math.random()*100));
}
}
}
标记:
<h:dataTable value="#{bean.numList}" var="num">
<h:column><h:outputText value="#{num}"/></h:column>
</h:dataTable>
来源:http://www.mkyong.com/jsf2/jsf-2-datatable-example/
希望这有帮助。