0

私は JSTL が初めてで、for each ループがどのように機能するかを正確に把握するのに苦労しています。しかし、私の Java Bean には、オブジェクトのプロパティを通過して取得する非常に単純な while ループがあるとします。ログに記録すると、ループから期待される出力が得られます。これは、 headerTest, headerMetaTestのような単純な文字列です。これが私のJava Beanのコードです。

Iterator<Resource> serviceList = null;
serviceList = resource.getChild("header").listChildren();

while(serviceList.hasNext()){
Resource child = serviceList.next();
headerTitle = child.adaptTo(ValueMap.class).get("headerTitle", "");
headerMeta = child.adaptTo(ValueMap.class).get("headerMeta, "");
}

ただし、JSTL でアクセスしようとすると、何も得られません。

<c:forEach var="child" items="${serviceList}">
    <p>${child.headerTitle}</p>
    <p>${child.headerMeta}</p>
</c:forEach>

不可解な部分は、エラーが発生せず、何も返されないことです。何か案は?本当に、本当にこれで迷っており、どんな助けも大歓迎です。私はこれに慣れていないので、コードサンプルは私が学ぶための良い方法であり、可能であれば素晴らしいと思います.

4

1 に答える 1

1

JSP ページでは、4 つのスコープに注意する必要があります。

ページ、リクエスト、セッション、およびアプリケーション。

JSTL タグは通常、この順序で属性を探します。

ページは、ページの処理中に割り当てられた属性にマップされますが、これらは通常非常にまれです。

request は ServletRequest に割り当てられた属性用です。これらの属性は、ページ リクエストの期間中持続し、その後破棄されるため、最も一般的に使用される属性です。

例えば

public void processMyServlet(ServletRequest request, ServletResponse){
    ...
    request.setAttribute("myAttribute",attributeValue);
    ...
}

session は、HttpSession に割り当てられた属性用です。これは、ユーザー セッション中に頻繁に使用されるユーザー値に役立ちます。

例えば

public void processMyServlet(HttpServletRequest request, HttpServletResponse){
    ...
    request.getSession().setAttribute("myAttribute",attributeValue);
    ...
}

application は ServletContext に割り当てられた属性用です。これは、アプリケーション全体で一貫しており、変更されない値に役立ちます。

例えば

public void processMyServlet(HttpServletRequest request, HttpServletResponse){
    ...
    request.getServletContext().setAttribute("myAttribute",attributeValue);
    ...
}

jsp をディスパッチするサーブレットを呼び出す場合は、少なくとも必要になります。

request.setAttribute("serviceList",myResourceCollection); 

サーブレット処理中のどこか。

jspですべてを行っている場合は、次のようなものが必要になります

<% java code to create collection

   request.setAttribute("serviceList",myResourceCollection); 
%>
于 2013-06-23T23:53:25.273 に答える