2012-01-04 11 views
0

サーブレット/ jsp NetbeansのAffablebenチュートリアルをJSFフレームワークに移植し、ビュー用にFaceletsを使用したいと考えています。データベースと同等のJSP to Facelets提供されたURLのループ化ループ

私はすでにJPAエンティティ、セッションBean、マネージドBeanを持っています。私はビューから始めています。しかし、私はこの行を回避するためのFaceletsで同等のものを発見していない:

<a href="<c:url value='category?${category.id}'/>"> 

これは、両方のJSPやfaceletで、完全なループです:

JSPコード:

<c:forEach var="category" items="${categories}"> 
    <div class="categoryBox"> 
     <a href="<c:url value='category?${category.id}'/>"> 
      <span class="categoryLabel"></span> 
      <span class="categoryLabelText"><fmt:message key='${category.name}'/></span> 

      <img src="${initParam.categoryImagePath}${category.name}.jpg" 
       alt="<fmt:message key='${category.name}'/>" class="categoryImage"> 
     </a> 
    </div> 
</c:forEach> 

等価Faceletsのコード:予想通り

<ui:repeat var="category" value="${categoryController.items}"> 
    <div class="categoryBox"> 
     <h:link outcome="${category.id}"/> 
     <span class="categoryLabel"></span> 
     <span class="categoryLabelText">${category.name}</span> 

     <img src="./resources/img/categories/${category.name}.jpg" 
       alt="${category.name}" class="categoryImage"/> 

    </div> 
</ui:repeat> 

この行は、Faceletsの中で動作していない。

<h:link outcome="${category.id}"/> 

Faceletsの同等の機能は何ですか?

EDIT 1

public String getName() throws UnsupportedEncodingException { 
    return URLEncoder.encode(name, "UTF-8"); 
} 

警告メッセージ:リソースのimg /カテゴリ/フルーツ+%26 + veg.jpg

答えて

1

を見つけることができません<h:link>は、JSFの暗黙的なナビゲーションを利用し、実際の(暗黙の)ナビゲーション結果が必要です値。結果にビューIDを指定する必要があります。リクエストパラメータは<f:param>で指定する必要があります。最初の例のように、スパンとイメージをリンク内にネストする必要もあります。これが何をすべき、あなたがルートにcategory.xhtmlファイルを持っていると仮定すると:

<h:link outcome="category"> 
    <f:param name="id" value="#{category.id}" /> 

    <span class="categoryLabel"></span> 
    <span class="categoryLabelText">#{category.name}</span> 
    <img src="./resources/img/categories/#{category.name}.jpg" 
      alt="#{category.name}" class="categoryImage"/> 
</h:link> 

無関係具体的な質問には、あなたにも<h:graphicImage>代わりの<img>を使用する必要があります。このようにして、JSFはsrcが正しく設定されるようにします。

<h:graphicImage name="img/categories/#{category.name}.jpg" 
    alt="#{category.name}" class="categoryImage"/> 

(単に標準を遵守し、一貫性のためにし、私は#{}${}を置き換えることに注意してください)

+0

早急な返信をいただきありがとうございました。ちょうど質問:<:choose>のためのFacelets同等または回避策は何ですか? (これが関連していない場合、私は新しいスレッドを投稿します、私に教えてください) –

+0

ああ、私は忘れてしまった。 の代わりにを使用すると、名前の文字列がデータベースから取得され、フィールド値にアンパサンドまたはスペース(たとえば 'fruit&veg')がある場合、イメージはレンダリングされません。 –

+0

1)JSFコンポーネントの 'rendered'属性を使います。 2)URLに無効な文字を使用しないでください。 'URLEncoder'を使用してください。 – BalusC

0

だろう、あなたの特定のケースではあなたはこのラインから変更できます。

<a href="<c:url value='category?${category.id}'/>"> 
をこれに

<h:link outcome="category.xhtml?id=#{category.id}" /> 
<h:link outcome="category"> 
    <f:param name="id" value="#{category.id}" /> 
</h:link> 
<h:outputLink value="category.xhtml?id=#{category.id}" ></h:outputLink> 
関連する問題