我有一些代码检查 xml 节点值并在该值为 true
时显示图像:
<x:if select="$person/pictureprivate != 'false'">
<c:set var="pidm">
<x:out select="$person/@pidm" />
</c:set>
<img src="<%=renderRequest.getContextPath()%>/getPicture.jsp&pidm=${pidm}"></img>
</x:if>
作为源的 jsp 是对 Web 服务的发布:
int len;
int size = 1024;
byte[] buf;
OutputStream o = response.getOutputStream();
String pidm=request.getParameter("pidm");
//out.print("URL: " + urlProp + pidm);
URL url = new URL("myURL" + pidm);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
InputStream is = connection.getInputStream();
if (is instanceof ByteArrayInputStream) {
size = is.available();
buf = new byte[size];
len = is.read(buf, 0, size);
}
else {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
buf = new byte[size];
while ((len = is.read(buf, 0, size)) != -1)
bos.write(buf, 0, len);
buf = bos.toByteArray();
}
o.write(buf);
o.flush();
o.close();
我知道 webservice jsp 可以工作,因为我在另一个应用程序中使用它。但是,图像未在我的 liferay portlet 中加载,并且尝试在 apache 错误中右键单击 -> 查看图像结果
请求的资源不可用
。我想我可能定义了我的 src 路径错误,但我不确定。
最佳答案
renderRequest
的 getContextPath
最有可能解析为门户的上下文,而您的插件有自己的上下文。事实上,即使 request.getContextPath
也很可能解析为门户(但请仔细检查):当提供 portlet 时,请求由门户处理。当您想要从 Portlet 的 Web 上下文中寻址资源时,您需要显式地对其进行寻址,并且对 Portlet 的 Web 上下文进行硬编码(不优雅)或找到如何对其进行寻址。
按照@ramp的评论并检查getContextPath
(对于renderRequest
和request
)实际解析的结果,您就更接近解决方案了。如果有疑问,暂时将其替换为硬编码的上下文路径,然后继续搜索动态路径。
另请注意,如果按照您希望的方式请求,您将无法访问 JSP 中门户登录的用户帐户。您没有在 JSP 中使用它,所以应该没问题 - 但我只是想确保人们也理解这一点
关于java - 在liferay portlet中使用jsp作为img src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930338/