我正在实现一种服务于Image的ImageServlet,受到BalusC示例的启发http://balusc.omnifaces.org/2007/04/imageservlet.html
我的servlet实现期望有一个参数" Animal"动物类型
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}" />
我的animalForm bean正确地为动物服务
public Animal getAnimal()
{
LOGGER.info("Current animal is : " + this.animal);
return this.animal;
}
我知道Animal=#{animalForm.animal}
是错误的,因为它添加了一个参数,它将是String类型而不是Attribute,但是我找不到在这里添加(Typed)属性的方法。
我还读到了关于使用omnifaces做同样事情的更新的方法,但是现在我处在一个学习曲线上,我(不幸地)开始使用ManagedBean和Tomcat的项目,所以我需要首先切换到CDI对象。一旦我在第一时间工作,我打算做后者
答案 0 :(得分:0)
有一种方法可以将(imal)对象作为查询字符串的一部分传递,但您需要
<强>豆强>
将animal转换为JSON字符串并编码为URL字符串:
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动物作为animal
属性传递给您的servlet。
Servlet方
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());
//...
}
Servlet doGet
方法将捕获您从JSF页面传递的jsonAnimalUrlEncoded
,将其解码回“普通”JSON字符串并将JSON字符串转换为真正的动物Java对象。
(写这个很有趣,因为类名是Animal:))