我有一个在Tomcat上运行的Java Web应用程序.我想加载静态图像,这些图像将在Web UI和应用程序生成的PDF文件中显示.此外,还将通过Web UI上传添加和保存新图像.
通过将静态数据存储在Web容器中但从Web容器外部存储和加载它们来解决这个问题并不是一个问题.
我不想在此时使用像Apache这样的单独的Web服务器来提供静态数据.我也不喜欢将图像以二进制形式存储在数据库中.
我已经看到一些建议,比如将图像目录作为指向Web容器外部目录的符号链接,但这种方法是否适用于Windows和*nix环境?
有人建议编写一个过滤器或servlet来处理图像服务,但这些建议非常模糊和高级别,没有指向如何实现这一目标的更详细信息.
我正在尝试构建用户个人资料页面以显示有关我的用户的一些详细信息.
页面的网址是这样的profile.xhtml?username=randomString.
所以,我要做的是加载randomString用户的所有数据.
这一切都很好,因为它是显示用户图像的时刻.
我使用PrimeFaces与graphicImage的组成部分,但问题是,它会导致一个新的请求,以获得图像,所以请求参数实际损失和getAvatar()方法接收一个空参数.
一个解决方案可能是使用SessionScoped bean,但它将从第一个请求的用户获取数据,即使randomString将改变它也会显示它们,所以我要求帮助:
如何显示依赖于请求参数的数据库中的动态图像?
谢谢 :)
编辑:BalusC回复后的新代码
JSF页面:
<c:set value="#{request.getParameter('user')}" var="requestedUser"/>
<c:set value="#{(requestedUser==null) ? loginBean.utente : userDataBean.findUtente(request.getParameter('user'))}" var="utente"/>
<c:set value="#{utente.equals(loginBean.utente)}" var="isMyProfile"/>
<pou:graphicImage value="#{userDataBean.avatar}">
<f:param name="username" value="#{utente.username}"/>
</pou:graphicImage>
Run Code Online (Sandbox Code Playgroud)
(我正在使用此变量,因为如果页面请求只是profile.xhtml没有参数,我希望显示已记录用户的配置文件)
托管Bean:
@ManagedBean
@ApplicationScoped
public class UserDataBean {
@EJB
private UserManagerLocal userManager;
/**
* Creates a new instance of UserDataBean
*/
public UserDataBean() {
}
public Utente findUtente(String username) {
return userManager.getUtente(username);
}
public StreamedContent getAvatar(){
String username = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("username");
System.out.println(username==null);
Utente u …Run Code Online (Sandbox Code Playgroud)