2014-03-27 21 views
5

Ich versuche Primefaces 4 Dialograhmen zu öffnen Dialog mit,Primefaces Dialog Rahmen funktioniert nicht, während Ajax Zuhörer mit

public void openDialog(String viewName) { 
    RequestContext.getCurrentInstance().openDialog(viewName); 
} 

Dies funktioniert:

<p:commandButton value="Click" action="#{impaktDialogBean.openDialog('/popup/test2')}"/> 

Dies gilt nicht:

<p:commandButton value="Click">  
    <p:ajax event="click" listener="#{impaktDialogBean.openDialog('/popup/test2')}" ></p:ajax> 
</p:commandButton> 

Also Primefaces Dialog Framework funktioniert nur mit Aktion & actionListener ?????

Ich verwende:

  • Primefaces 4
  • Tomcat 7
  • JSF 2.2.6 Mojarra

Dank.

+0

p: commandButton hat standardmäßig ajax = "true", warum möchten Sie p: ajax aufrufen, haben Sie versucht, ajax = "false" zu machen. – user1433804

+1

Ja, ich weiß, aber was ist, wenn ich den Dialog für Ereignisse öffnen möchte, bei denen die Aktion nicht wie die Datentabellenzeile ausgelöst werden kann ????? ... ajax = false funktioniert nicht. –

Antwort

0

Sie haben dies:

public void openDialog(String someView) { 
    RequestContext.getCurrentInstance().openDialog(someView); 
} 

Also, wenn Sie dies tun:

<h:form id="form"> 
    <p:commandButton id="button" value="Click" actionListener="#{bean.openDialog('someView')}" /> 
</h:form> 

Sie empfangen diese in Ihrer Ajax Antwort:

PrimeFaces.openDialog({ 
    url:'/some/address/view.xhtml', 
    pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64', 
    sourceComponentId:'form:button', 
    sourceWidget:PF('widget_form_button'), 
    options:{}}); 

Also, Sie dies ausprobieren können:

<h:form id="form"> 
    <p:commandButton id="button" value="Click" onclick="PrimeFaces.openDialog({ 
     url:'/some/address/view.xhtml', 
     pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64', 
     sourceComponentId:'form:button', 
     sourceWidget:PF('widget_form_button'), 
     options:{}});" /> 
</h:form> 

Sie können sogar den Rückgabewert verwenden:

<h:form id="form"> 
    <p:growl id="growl" showDetail="true" /> 

    <p:commandButton id="button" value="Click" onclick="PrimeFaces.openDialog({ 
     url:'/some/address/view.xhtml', 
     pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64', 
     sourceComponentId:'form:button', 
     sourceWidget:PF('widget_form_button'), 
     options:{}});"> 

     <p:ajax event="dialogReturn" listener="#{bean.returnedValue}" update="growl" /> 
    </p:commandButton> 
</h:form> 

Die AJAX ist nur das Ergebnis an die Ziel-URL zu drehen. Wenn Sie bereits die Ziel-URL haben, müssen Sie dies nicht tun. In meinen grundlegenden Tests funktioniert das gut, genau wie das Original, außer dass Sie die Zieladresse im 'URL'-Feld übergeben müssen, nicht das Ergebnis.

Hoffe das hilft.

+0

Ja, es funktioniert, Sie können es auf die 'oncomplete' Ajax-Attrib und es wird der Dialog ausgelöst. Aber es ist sicher, die 'pfdlgcid' zu codieren? Sein natürliches Verhalten scheint sich bei jedem Anruf zufällig zu ändern. – daVe

0

Die einfachste Lösung, die ich gefunden habe, ist, den Knopf über Javascript hochzufeuern.

Die Schaltfläche, die den Dialog (vielleicht versteckt) öffnet:

<p:commandButton id="myButton" action="#{bean.openMyDialog}" style="display:none" /> 

Das Ajax-Ereignis, dass ‚Klicks‘ auf die Schaltfläche:

<p:ajax ... oncomplete=" $('#myButton').click() " /> 
0

Ich weiß, die Frage vor langer Zeit gefragt wurde, aber für zukünftige Zeiten ...

Was ist mit einem <p:remoteCommand>?

Unterschiedlicher Ansatz, um einen Javascript-Aufruf zu Ihrer Bean zu erreichen.

Verwandte Themen