动态图形图像

时间:2014-05-08 07:53:50

标签: jsf jsf-2 primefaces jsf-2.2

我正在尝试从数据库中获取动态图形图像。 我在SO中找到了一些相关问题,但不知何故它不起作用。

Page:

<p:dataList styleClass="routeDatalist" value="#{searchRoutesBean.foundRoutes}" var="uiRoute">
    <p:outputLabel value="USERID #{uiRoute.owner.id}"/>
    <h:graphicImage value="#{photoStreamer.streamedContent}" styleClass="userProfileImage">
    <f:param name="userId" value="#{uiRoute.owner.id}" />
    </h:graphicImage>
<p:/dataList>

我从支持bean获取对象列表

    @SessionScoped
    @ManagedBean
    public class SearchRoutesBean{
     private List<UIRoute> foundRoutes;
      ...
    }

我创建了一个支持bean,它应该使用userimage bytearray并创建一个流内容

 @ManagedBean(name = "photoStreamer")
@ApplicationScoped
public class PhotoStreamer implements Serializable {

    @Autowired
    UserService userService;

    private StreamedContent streamedContent;

    public StreamedContent getStreamedContent() {
    ExternalContext externalContext = FacesContext.getCurrentInstance()
        .getExternalContext();
    String userId = externalContext.getRequestParameterMap().get("userId");

    if (StringUtils.isNotBlank(userId)) {

        User user;
        try {
        user = userService.getUserById(Long.valueOf(userId));
        byte[] image = user.getProfileJpegImage();
        if (image != null && image.length > 0) {
            return new DefaultStreamedContent(new ByteArrayInputStream(
                image), "image/jpeg");
        } else {
            BufferedImage bufferedImg = new BufferedImage(250, 350,
                BufferedImage.TYPE_INT_RGB);
            Graphics2D g2 = bufferedImg.createGraphics();
            g2.drawString("User has no ProfilImage", 50, 175);
            ByteArrayOutputStream os = new ByteArrayOutputStream();

            ImageIO.write(bufferedImg, "png", os);

            return new DefaultStreamedContent(new ByteArrayInputStream(
                os.toByteArray()), "image/png");
        }
        } catch (NumberFormatException | UserServiceException | IOException e) {
        throw new IllegalStateException(e);
        }

    }
    return null;

    }
}

我不知道为什么,但给定参数userId始终为空。

有人知道可能是什么问题吗? BR

2 个答案:

答案 0 :(得分:1)

怎么样?
<p:dataList styleClass="routeDatalist" value="#{searchRoutesBean.foundRoutes}" var="uiRoute">
    <p:outputLabel value="USERID #{uiRoute.owner.id}"/>
    <h:graphicImage value="#{photoStreamer.streamedContent(uiRoute.owner.id)}" styleClass="userProfileImage"/>
<p:/dataList>

+

public StreamedContent getStreamedContent(String userId) {

if (StringUtils.isNotBlank(userId)) {

        User user;
        try {
        ...
    }

答案 1 :(得分:0)

问题是dataList需要包装成h:form。 感谢Makky给我这个教程 http://www.youtube.com/watch?v=imiBwk_xqaE