2017-12-01 2 views
0

私はBalusC例に触発され、画像を提供するImageServletの並べ替えを実装していますここhttp://balusc.omnifaces.org/2007/04/imageservlet.htmlカスタムサーブレットにリダイレクトするときにJSFのHttpServletRequest属性を追加する方法は?

私のサーブレットの実装は、型動物のパラメータ「アニマル」

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     LOGGER.info("On ImageServlet"); 

     // Get Animal from request. 
     Animal animal = (Animal) request.getAttribute("Animal"); 

マイJSFページを持つことを期待いくつかの点で持っていますgraphicImageはタグ

<h:graphicImage value="faces/image?Animal=#{animalForm.animal}" /> 

正しく

01を動物にサービスを提供している私のanimalForm豆

私はAnimal=#{animalForm.animal}が間違っていることを知っています。パラメータはString型で属性ではありませんが、ここに(型付き)属性を追加する方法が見つかりません。

omnifacesで同じことをやっている最新の方法についても読んだことがありますが、今は習熟していて、ManagedBeanとTomcatのプロジェクトで始めました(不幸にも)まずCDIオブジェクトに切り替えます。私は私が最初の場所で

+0

現在のセッションに 'Animal'オブジェクト、その後、一度所望の目的のために使用され、それを削除するストア。 – Tiny

答えて

0

作業何かを持っていたら、後者はクエリ文字列の一部として(imal)オブジェクトを渡す方法があることを行う予定がありますが、

  • にする必要がありますあなたを変換します動物をJSON
  • に変換し、「JSON動物」を文字列に適合するURL Query string標準にエンコードします。 URL文字列にJSON文字列とエンコードへ

コンバート動物:

import com.google.gson.Gson; 
import java.net.URLEncoder; 
//..... 

Animal animal; 

public Animal getAnimal() { 
    return animal; 
} 

//... 

String jsonAnimalUrlEncoded; 

public String getJsonAnimalUrlEncoded() throws UnsupportedEncodingException{ 
    Gson gson=new Gson(); 
    String jsonAnimal=gson.toJson(animal); 
    jsonAnimalUrlEncoded=URLEncoder.encode(jsonAnimal, "UTF-8"); 
    System.out.println("URL encoded JSON animal == " + jsonAnimalUrlEncoded); 
    return jsonAnimalUrlEncoded; 
} 

JSFページ(動物の画像)

<h:graphicImage value="faces/image?animal=#{animalForm.jsonAnimalUrlEncoded}" /> 

これは、URLを渡しますサーブレットにエンコードされたJSON動物をとして属性。

サーブレット側

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    LOGGER.info("On ImageServlet"); 

    // Get json animal url encoded string from request 
    String jsonAnimalUrlEncoded = request.getAttribute("animal"); 
    //convert it to JSON animal 
    String jsonAnimal=URLDecoder.decode(getJsonAnimalUrlEncoded(),"UTF-8"); 
    //transform json animal to animal java object 
    Animal animal = (Animal) new Gson().fromJson(jsonAnimal, Animal.class); 

    System.out.println("My name is: " + animal.getName()); 

    //... 
} 

サーブレットdoGet方法は、JSFページから渡されたjsonAnimalUrlEncodedをキャッチバック「通常の」JSON文字列にそれをデコードし、本物の動物のJavaオブジェクトにJSON文字列を変換します。

クラス名は動物:)だったので、それはこれを書いて楽しかった)

+0

私はそれが同じwebapp内にあるのかどうか最初に質問したいと思います。もしそうなら、@Tinyの 'コメント'は方法が単純で、もっと複雑な答えに行くのではないときだけです。 'id's'を渡すことはよりシンプルですが、セキュリティは忘れてはいけません – Kukeltje

+0

@Kukeltje、私はあなたに部分的に同意します。IDを渡すことは解決策ですが、私の意見では、ユーザーは高度であり、彼はすでにそれを知っています。だから、彼の動機を掘り下げずに、私はどんな場合でもうまくいく素晴らしいソリューションを提供しました。それは正当な解決策でもあります。あなたは同意しない? –

+0

ええええええええええええええええええええとお願い申し上げます。そして、あなたのソリューションは技術的に悪くありません(重複の種類がありますが)。合法性(?)に関して、それは私が最初に尋ねたものに依存する。それは同じwebappにあります、それは技術的には正しいですが、私はそれが複雑になるためにdownvoteに傾いているでしょう(シンプルさは美しいです) – Kukeltje

関連する問題