J'essaie de masquer sous conditions ou d'afficher un <p:dataGrid>
basé sur une propriété bean session. Mon <p:dataGrid>
est enveloppé dans une boîte de dialogue p: et j'ai pensé que je pouvais utiliser les attributs closeListener et onCloseUpdate de p: dialog pour contrôler le masquage/show du <p:dataGrid>
. J'utilise une propriété bean beanean basée sur la session dans l'attribut de rendu du p: dataGrid qui est défini sur true dans la méthode de actionListener="#{bookmarklet.loadImages}"
, puis défini sur false dans le closeListener="#{bookmarklet.close}"
. Il n'est jamais rendu même si la méthode loadImages est exécutée et la propriété boolean est définie sur true. Idéalement, je voudrais rendre le <p:dataGrid>
, si le value="#{bookmarkletBean.imageURLs}"
est vide. J'ai essayé rendered="#{!empty bookmarkletBean.imageURLs}"
mais j'ai une exception EL.Rendu conditionnel d'un p: dataGrid et de son contenu
page:
<p:dialog header="#{bundle['bookmarklet.dialog.HEADER']}" widgetVar="scrapeDlg" modal="true" height="450" width="700" draggable="false" resizable="false" closeListener="#{bookmarklet.close}" onCloseUpdate="imageGrid">
<h:form id="scrapeFrm">
<p:commandButton onclick="rcTest()" value="call server"/>
<h:inputHidden id="scrapeURL" value="http://www.freefoto.com/preview/04-01-70?ffid=04-01-70"/>
<p:remoteCommand name="rcTest" process="@this,scrapeURL" actionListener="#{bookmarklet.loadImages}" update="imageGrid"/>
<p:dataGrid id="imageGrid" var="img" value="#{bookmarkletBean.imageURLs}" columns="1" rows="1" paginator="true" effect="true"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} "
paginatorPosition="bottom"
rendered="#{bookmarkletBean.shouldRender}">
<p:column>
<h:panelGrid columns="1" style="width:100%">
<p:graphicImage value="#{img}" width="100" height="100"/>
</h:panelGrid>
</p:column>
</p:dataGrid>
</h:form>
</p:dialog>
bean session
:
@Named
@Scope("session")
public class BookmarkletBean extends BaseSessionBean{
private List<String> imageURLs;
private boolean shouldRender;
private String hidden;
public String getHidden() {
return hidden;
}
public void setHidden(String hidden) {
this.hidden = hidden;
}
public List<String> getImageURLs() {
return imageURLs;
}
public void setImageURLs(List<String> imageURLs) {
this.imageURLs = imageURLs;
}
public boolean isShouldRender() {
return shouldRender;
}
public void setShouldRender(boolean shouldRender) {
this.shouldRender = shouldRender;
}
}
classe d'action:
@Named
@Scope("request")
public class Bookmarklet extends BaseAction{
@Inject
private BookmarkletBean bookmarkletBean;
@Inject
private BookmarkletService bookmarkletService;
public void loadImages(ActionEvent e) throws MalformedURLException, IOException {
ExternalContext context = FacesUtils.getExternalContext();
String scrapeURL = context.getRequestParameterMap().get("scrapeFrm:scrapeURL");
bookmarkletBean.setImageURLs(bookmarkletService.scrape(scrapeURL));
bookmarkletBean.setShouldRender(true);
}
public void close(CloseEvent e){
bookmarkletBean.setShouldRender(false);
}
}
ouais j'ai –
c12
@colin Ah .. ok mis à jour ma réponse. – Mark
Merci pour l'aide! J'ai été en mesure de l'obtenir pour rendre conditionnellement en utilisant votre suggestion ci-dessus, mais comment pourrais-je cacher le panneau à nouveau? J'ai essayé d'utiliser le closeListener de la boîte de dialogue = "# {bookmarklet.close}" onCloseUpdate = "imageGrid" puis dans la méthode bookmarklet.close j'ai défini "shouldRender" sur false mais lorsque la boîte de dialogue s'ouvre à nouveau, le panneau est déjà rendu. Des idées? – c12