Я пытаюсь условно скрыть или показать <p:dataGrid>
на основе свойства сессионного компонента. Мой <p:dataGrid>
обернут в диалог p: и я подумал, что мог бы использовать атрибуты closeListener и onCloseUpdate для p: диалогового окна, чтобы управлять скрытием / показом <p:dataGrid>
. Я использую логическое свойство bean-компонента на основе сеанса в атрибуте рендеринга p: dataGrid, который устанавливается в true в моем методе <p:remoteCommand>
s actionListener="#{bookmarklet.loadImages}"
, а затем в false в closeListener="#{bookmarklet.close}"
. Он никогда не обрабатывается, даже если метод loadImages выполняется, а логическое свойство имеет значение true. В идеале я хотел бы сделать <p:dataGrid>
, если value="#{bookmarkletBean.imageURLs}"
пусто. Я попытался rendered="#{!empty bookmarkletBean.imageURLs}"
, но получил исключение EL.
страница:
<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>
сессионный компонент:
@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;
}
}
класс действия:
@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);
}
}