0

参照:http ://www.primefaces.org/showcase/ui/galleria.jsf

私のページ:

<p:galleria id="merchant-gallery" value="#{testController.imageIds}" var="item" autoPlay="false" >  
    <p:graphicImage width="300" value="#{imageStreamer.image}" >
        <f:param name="id" value="#{item}" />
    </p:graphicImage>
</p:galleria>  

<p:galleria>フォームで囲んで追加してみました<p:remoteCommand name="updateme" update="@form"/>が、updatemeを呼び出した後、ガレリアを空白にするだけです。

*アップデート

testController Bean:

public List<Integer> getImageIds() {
    int aId = (Integer) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user_id");
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("TEST2PU");
    EntityManager em = emf.createEntityManager();
    TypedQuery<Merchant> tp = em.createQuery("SELECT a FROM Account a WHERE a.id = :id", Account.class);
    tp.setParameter("id", aId);
    current = tp.getSingleResult();

    Collection rawPhotoCollection = current.getPhotoCollection();

    imageIds = new ArrayList<Integer>(rawPhotoCollection);
    List<Photo> photoList = new ArrayList<Photo>(rawPhotoCollection);

    for (int i = 0; i < photoList.size(); i++) {
        int imageId = photoList.get(i).getId();
        imageIds.set(i, imageId);
    }

    return imageIds;
}

imageStreamer Bean:

@EJB
private test.controller.photo.PhotoFacade ejbFacade;

public StreamedContent getImage() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();

    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
        return new DefaultStreamedContent();
    } else {
        Map<String, String> param = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        String id = param.get("id");

        Photo image = ejbFacade.find(Integer.valueOf(id));
        return new DefaultStreamedContent(new ByteArrayInputStream(image.getImage()));
    }
}
4

1 に答える 1

1

私はあなたの例を作り直しましたが、同じ問題があります。アップロードやリモートコマンドとは関係ありません。Primefacesのバグだと思います。同様の問題については、 http://code.google.com/p/primefaces/issues/detail?id=4840を参照してください。コマンドを実行すると

PrimeFaces.cw('Galleria','widget_companydetail_merchant-gallery',{id:'companydetail:merchant-gallery',transitionInterval:0,panelWidth:640,panelHeight:480,custom:false},'galleria');

Firebugコンソールでは、ガレリアが再表示されます。したがって、リモートコマンドを変更してjavascriptをoncompleteに追加すると、機能します。

<p:remoteCommand name="updateme" update="@form" oncomplete="PrimeFaces.cw('Galleria','widget_companydetail_merchant-gallery',{id:'companydetail:merchant-gallery',transitionInterval:0,panelWidth:640,panelHeight:480,custom:false},'galleria');"/>
于 2013-03-27T13:06:25.727 に答える