0

背景

我正在学习 Java,目前正在学习 JSF。我来自 ASP.NET MVC 背景,最近才接触到 Java 世界,所以要温柔 ;)

问题

我不太清楚如何将模型(属于List<T>)放入 JSF 视图中。我最近学习 Struts 时所做的事情如下:

  1. 像这样创建了一个 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);
        }
    
  2. 链接到查看产品页面,如下所示:

<html:link forward="viewProducts" styleClass="btn btn-primary">View Products</html:link>

  1. 在视图中,我得到了这样的模型:

    <% 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每个会话只有一个,所以会使用它吗?即便如此,在运行时,它还是一个空对象。我在这里想念什么?我怎样才能使这项工作?我确实在数据库中有行,所以不要问这个。:)

4

2 回答 2

2
value="#{EmployeeCollection.items}"

骆驼箱开始小试

value="#{employeeCollection.items}"
于 2012-10-27T09:27:36.070 回答
1

试试下面的代码,

托管豆:

@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/

希望这可以帮助。

于 2012-10-27T07:31:38.560 回答