GlassFish的alternatedocroot路径应如何设置才能在h:graphicImage中显示图像?

5
我在我的index.xhtml文件中遇到了显示图片的问题。
我希望从我的数据库中获取链接以指向图像文件,这样<h:graphicImage/><img />标签才能够将其显示出来。目前只使用本地主机。
我已经成功将一张图片保存到c:\var\webapp\images\并且在我的glassfish-web.xml文件中添加了<property name="alternatedocroot1" value="from=/images/* dir=/var/webapp" />。现在我可以使用以下代码:
<h:graphicImage value="#{entity.imageLink}" />
<img alt="#{entity.title}" src="#{entity.imageLink}" />

但是我从来没有成功地显示过任何图片!在我的数据库中应该写什么才能显示保存在c:\var\webapp\images\imageExample.jpg的图片?我的想法是问题出在路径上,但我可能很错。


1
难道不建议将其存储在其他地方吗? 我更多或 less 地遵循了 BalucsC 在另一个线程中的答案。 - TheZeph
使用此配置,URL 必须(绝对或相对)指向 http://example.com/images/filename.ext。首先在浏览器地址栏中直接输入它,而不使用中间的 HTML/JS 页面进行测试。 - BalusC
1
如上所述,根据此配置,它位于 http://localhost:8080/images/imageExample.jpg。如果仍然无法正常工作,并且您已将代码复制并粘贴到问题中,则可能是 alternatedocroot1 中的拼写错误导致的。您在那里忘记了 _(请再次检查找到此信息的文档/示例)。 - BalusC
这是Windows系统吗?尝试在dir中使用Windows路径,例如dir=c:\var\webapp。请问GF版本是多少? - BalusC
Windows8,Glassfish 4,JSF 2.2。将“/”更改为“\”,并添加c:时出现“备用docbase的URL模式\ images \ *无效”的错误提示。将其更改回“/”后,“警告”消失了,但仍然找不到图像。 - TheZeph
显示剩余5条评论
2个回答

1

解决方法如下:

更改
<property name="alternatedocroot1" value="from=/images/* dir=/var/webapp" />

<property name="alternatedocroot_1" value="from=/images/* dir=c:\var\webapp" />
注意斜杠。

在我的数据库(MySQL)中,我保存/images/imageExample.jpg,然后使用<h:graphicImage value="#{entity.imageLink}" />显示它。

现在我可以通过http://localhost:8080/<MyAppName>/images/imageExample.jpg访问该图像。


0

当你不确定时,将内容打印到服务器日志中以查看传递给标签的内容总是一个好主意。但我认为问题在于,当使用反斜杠时,应该将其加倍 \ ,因为它用于转义字符。


我已经检查了DOM以查看使用了哪种类型的链接,并尝试使用“\”。我还将数据库中的文本更改为不同的路径,但没有运气。使用“alternatedocroot1”,我至少得到了看起来像是正确链接的东西:/<projectname>/images/imageExample.jpg,但仍然没有显示图像:( - TheZeph
如果您直接在浏览器中输入收到的链接,能否显示图像? - prmottajr
不行。如果我输入h:graphicImage value="/#{entity.imageLink}"(注意“/”),路径将显示为“/projectName/images/imageExample.jpg”。在我的数据库中,我将“images/imageExample.jpg”作为varchar(MySQL)存储。如果没有开头的“/”,则只会显示“images/imageExample.jpg”。 - TheZeph
好的,但是如果您直接在浏览器中输入此地址,它会加载图像吗? - prmottajr
不,它没有。这是我在之前的回答中显然没有说清楚 :P - TheZeph
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接