Bedingt render a p:dataGrid-Steuerelement und seinen Inhalt
Ich versuche, bedingt ein-oder ausblenden einer <p:dataGrid>
basiert auf einer session-bean-Eigenschaft. Meine <p:dataGrid>
verpackt in einem p:dialog und ich dachte, ich könnte die p:dialog ist closeListener und onCloseUpdate Attribute zur Steuerung des ein - /ausblenden der <p:dataGrid>
. Ich bin mit einem session-bean eine Boolesche Eigenschaft, die in der gerenderten Attribut des p:dataGrid, das auf true festgelegt wird, in meinem <p:remoteCommand>
's actionListener="#{bookmarklet.loadImages}"
- Methode, und legen Sie dann auf false in der closeListener="#{bookmarklet.close}"
. Es wird nie gerendert, obwohl die loadImages Methode ausgeführt und die Boolesche Eigenschaft auf true gesetzt ist. Im Idealfall würde ich gerne zum Rendern der <p:dataGrid>
, wenn die value="#{bookmarkletBean.imageURLs}"
leer ist. Ich habe versucht rendered="#{!empty bookmarkletBean.imageURLs}"
aber ich bekomme einen EL Ausnahme.
Seite:
<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>
session-bean:
@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;
}
}
Aktion Klasse:
@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);
}
}
InformationsquelleAutor c12 | 2011-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, wenn Sie zunächst einen Komponenten gerendert Wert auf false, ist es nicht auf der Seite vorhanden sind. Beim update wird aufgerufen, imageGrid es gibt keine Komponente zur Aktualisierung gefunden.
Was Sie tun müssen, ist, wickeln Sie die
<p:dataGrid>
in einem<p:ouputPanel>
und aktualisieren Sie die<p:outputPanel>
statt Ihre<p:dataGrid>
.Ah .. ok aktualisiert meine Antwort.
Vielen Dank für die Hilfe! Ich war in der Lage, es bedingt render mit Ihrem Vorschlag oben, aber wie Verstecke ich die Systemsteuerung wieder? Ich habe versucht, mithilfe von das Dialogfeld closeListener="#{bookmarklet.schließen}" onCloseUpdate="imageGrid" und dann in das bookmarklet.close-Methode ich shouldRender auf false, aber wenn sich das Dialogfeld öffnet sich wieder das panel ist bereits erbracht. Irgendwelche Ideen?
InformationsquelleAutor Mark