0

バックグラウンド

私はJavaを学んでおり、現在JSFを使用しています。私はASP.NETMVCのバックグラウンドを持っており、最近Javaの世界に触れたばかりなので、優しくしてください;)

問題

List<T>モデル(の)をJSFビューに取り込む方法がよくわかりません。最近Strutsを学んだときに私がしたことは、次のとおりです。

  1. 次のようなサーブレットを作成しました。

    @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ページで機能しないことに気づきました。十分に公平ですが、テーブル/グリッドにアイテムを表示できるように、コレクションをページに渡すにはどうすればよいですか?

編集

h:dataTableSanjeevi.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オブジェクトになります。ここで何が欠けていますか?どうすればこれを機能させることができますか?私は確かにデータベースに行を持っているので、それについて尋ねないでください。:)

4

2 に答える 2

2
value="#{EmployeeCollection.items}"

キャメルケースは小さな試みを開始します

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

次のコードを試してください、

マネージド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/

お役に立てれば。

于 2012-10-27T07:31:38.560 に答える