<img src=<%if(request.getParameter("x")==null){"/images/x.gif">}
else{"get-it?x=<%=request.getParameter("x")}%>">
如果动态生成的图像的参数为空,则指定要显示的默认inage的正确语法是什么?此外,我可能想要添加其他条件,这些条件需要显示默认图像。
我应该补充一点,这是在一个由java servlet控制的jsp页面中。
答案 0 :(得分: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库,并包含核心标记库。
说了这么多,你还应该考虑在Servlet本身准备Image URI,转发到JSP。
假设您有一个HTML表单:
<form action="/servlet1" method="POST">
<input type = "text" name="x" />
</form>
在/servlet1
映射的Servlet中,您应该获取参数x
,并根据该参数创建图像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即可。
另见:
答案 1 :(得分:1)
通常的方法是在应用程序(即servlet)的逻辑中计算出图像URI,而不是在视图中(即JSP)。
在你的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);
在您的JSP中;
<img src="${imageUri}"/>