0

当我输入以下内容时,Eclipse 给了我各种邪恶的魔力:

<img src=<%if(request.getParameter("x")==null){"/images/x.gif">}  
else{"get-it?x=<%=request.getParameter("x")}%>">

如果动态生成的图像的参数为空,则指定要显示的默认 inage 的正确语法是什么?另外,我可能想添加其他需要显示默认图像的条件。

我应该补充一点,这是在一个由 java servlet 控制的 jsp 页面中。

4

2 回答 2

2

使用EL(Scriplets 早就死了):

<c:set var="imgURL" value="get-it?x=${param.x}" />
<img src="${empty param.x ? '/images/x.gif' : imgURL}" />

或者您也可以在不设置其他属性的情况下执行此操作:

<img src="${empty param.x ? '/images/x.gif' : 'get-it?x='}${param.x}" />

如果您只有一个if-else. 正如@Sotirios 的评论中所述,如果您有多个条件可供选择 -if-else if-else阶梯,那么您将需要使用<c:choose>标签。

注意,您需要在lib文件夹中添加 JSTL 库,并包含核心taglib。


说了这么多,您还应该考虑在 Servlet 本身中准备 Image URI,转发到 JSP。

假设您有一个 HTML 表单:

<form action="/servlet1" method="POST">
    <input type = "text" name="x" />
</form>

在映射的 Servlet 中/servlet1,您应该获取参数,并基于该参数x创建图像 URL 。然后将该图像 url 放入请求属性中:

String x = request.getParameter("x");
if (x == null) {
    // Set Default image in request attribute
    request.setAttribute("imageURL", "images/x.gif");

} else {
    // Else create the image, and set it in request attribute
    resp.setContentType("image/gif");
    BufferedImage bi = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
    GetBI fetchBI = new GetBI(); 
    bi = fetchBI.get_bi(x); 
    ImageIO.write(bi,"gif",resp.getOutputStream()); 

    request.setAttribute("imageURL", "get-it?x="+x);
}

// Forward the request to the required JSP

然后在 JSP 页面中,您可以*imageURL*使用EL

<img src="${imageURL}" />

看,我只需要一个 Servlet。看看,如果我错过了什么,请发表评论。我认为您想要做的事情可以简单地使用单个 Servlet 来完成。

也可以看看:

于 2013-08-06T15:43:39.810 回答
1

The normal approach would be to work out the image URI in the logic of your application (ie the servlet) and not in the view (ie the JSP).

In your servlet;

String uri;
String x = request.getParameter("x");
if (x == null) {
  uri = "/images/x.gif";
} else {
  uri = "get-it?x=" + x;
}
request.setAttribute("imageUri", uri);

In your JSP;

<img src="${imageUri}"/>
于 2013-08-06T15:48:51.213 回答