2012-10-12 6 views
14

Ho alcuni problemi con Primefaces 3.2 e JSF 2.1.Primefaces p: commandButton con azione non chiamata

mio codice come questo:

<p:toolbar id="jeditortoolbar" styleClass="jeditortoolbar"> 
     <p:toolbarGroup align="left" height="25" style="height:25px"> 
     <p:commandButton type="button" title="#{msg.beenden}"/> 
     <p:commandButton type="button" title="#{msg.neu}"/> 
     </p:toolbarGroup> 
</p:toolbar> 

Quando prendo uno sguardo al primefaces mostrare il mio p: commandButton bisogno

actionListener="#{myBean.myActionMethod}" 

e la mia Bean ha bisogno di un metodo come

public void myActionMethod(){} 

Ho un h:form attorno al mio tag p:toolbar!

My Bean è ViewScoped.

La mia soluzione è In *.xhtml File

<p:commandButton type="button" title="#{msg.neu}" onclick="addNewEmptyFile()"/> 
<p:remoteCommand name="addNewEmptyFile" update=":codeTabForm"> 
    <f:setPropertyActionListener value="#{true}" target="#{myBean.myEvent}"/> 
</p:remoteCommand> 

In MyBean.java

private String myEvent; 

public void setMyEvent(String value){ myActionMethod();} 

Questo funziona per me, ma penso che questo è un codice molto sporco.

Può aiutarmi tutti?

+0

Dov'è il problema? Cosa succede se lo provi come nella vetrina? –

+0

Quando aggiungo il metodo ActionListener, l'evento non viene chiamato. – user1740789

+3

Hai provato a rimuovere 'type =" button "' dai tuoi pulsanti di comando? –

risposta

11

Prova questa

Bean.java

@ManagedBean 
@ViewScoped 
public class Bean { 

    public String testButtonAction() { 
     System.out.println("testButtonAction invoked"); 
     return "anotherPage.xhtml"; 
    } 

    public void testButtonActionListener(ActionEvent event) { 
     System.out.println("testButtonActionListener invoked"); 
    } 

} 

page.xhtml

<p:toolbar> 
    <p:toolbarGroup> 
    <p:commandButton action="#{bean.testButtonAction}"/> 
    <p:commandButton actionListener="#{bean.testButtonActionListener}"/> 
    </p:toolbarGroup> 
</p:toolbar> 
+5

Vorrei davvero che l'IDE potesse avvisare lo sviluppatore di questo, invece di ignorare semplicemente la mancata corrispondenza della firma del metodo ;-) – Leo

+1

Per riferimento futuro: Nel mio caso ho copiato il tipo di attributo = pulsante da alcuni esempi e mi sono chiesto perché questo codice funziona e il mio pulsante no. – Thomas

+2

rimozione type = "button" risolto il problema – Fabii