2017-11-18 18 views
0

JSFコンポーネントを使用して動的ブレッドクラムを実装したいと考えています。 だから私の考えは、私はGETリクエストが私のサーバーに行く来たが、それは私のサーブレットによって処理されることはありません参照して、この時点で私のサーブレットJSFでサーブレットにリクエストパラメータを使用してリンクを作成するにはどうすればよいですか?

<c:forEach items="#{sub_steps}" var="sub_step" varStatus="loop">   
    <h:link value="#{sub_step.name}" action="#{homeManager.redirect()}" ajax="false"> <!-- action="#{homeManager.redirect()}" --> 
     <f:param name="sub_step_id" value="#{sub_step.sub_step_id}" /> 
    </h:link> 
</c:forEach> 

にパラメータを渡すために、コードのこの部分を使用することです。私のマネージドBean内

@ManagedBean(name="homeManager", eager=true) 
@RequestScoped 
public class homeManager extends HttpServlet implements javax.servlet.Servlet 

私の方法のリダイレクト方法:

は、私はこのようなリクエストスコープと管理Bean持っ

public String redirect(){ 
     return "shop"; 
    } 

と私のweb.xmlの抽出物を

<servlet> 
    <servlet-name>Shop</servlet-name> 
    <servlet-class>com.kino.front.homeManager</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Shop</servlet-name> 
    <url-pattern>/shop</url-pattern> 
</servlet-mapping> 

マークアップで設定したパラメータを使用して私のURLマッピングショップにリダイレクトすると、私のサーブレットはpデータをロセスし、更新されたデータでビューをレンダリングします。

なぜ私のメソッドは呼び出されませんか? JSFからServletに値を渡す適切な方法はありますか?

+1

サーブレットであることと、同じクラスのjsfアノテーションを組み合わせたことについては、どこから問題を解決するのですか?奇妙な組み合わせ – Kukeltje

答えて

0

ソリューションでh:linkを置き換えるです

<a href="#{request.contextPath}/shop?sub_step_id=#{sub_step.sub_step_id}"> 
#{sub_step.name} 
</a> 

UPDATE:

またはより良いJSFコンポーネントを使用して(@ Kukeltjeさんのコメントにありがとう)他のものの他に

<h:outputLink value="#{request.contextPath}/shop?sub_step_id=#{sub_step.sub_step_id}"> 
#{sub_step.name} 
</h:outputLink> 

h:linkactionajaxのattriがありませんh:linkは、それが参照して終わるので、例えば、代わりに希望/YourApp/shop

/YourApp/Faces/shop前と私の提案し、あなたを適用した後、自分のホームページのソースをチェックアウト、コンテキストパスを顔付加しているためbutes)、あなたのコードは動作しません。違いを見ることができます。

+0

は 'h:outputLink'も解決策にはなりませんか? – Kukeltje

+0

@Kukeltje、そうです。それはもっと良い解決策です。 –

+0

それはあなたが好きならjsfを使ってそれを更新することもできますが、それ以外の方法はそれほど優れていません。そうでなければ大きな利点はありません。(OK、それを無効にしてスパンを見るだけです) – Kukeltje

関連する問題