2010-12-27 9 views
1

Ich habe ein commandButton in einem DataTable. Allerdings wird die "Aktion" nicht aufgerufen, wenn ich darauf klicke (gleicher Effekt mit einem actionListener); Ich habe Protokolle am Anfang der Serveraktion hinzugefügt, und es wird nie angezeigt. Bitte beachten Sie, dass der Button funktioniert, wenn er sich außerhalb des Datenträgers befindet.JSF - p: dataTable - p: commandButton funktioniert nicht einmal in p: spalte

Hier ist mein Code:

<h:form id="compSearchForm"> 
    <p:dataTable var="competency" value="#{competencySearchBean.matchingCompetencies.toArray()}"> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputLabel value="Title" /> 
      </f:facet> 
      <h:outputText value="#{competency.title}" /> 
     </p:column> 

     <p:column> 
      <p:commandButton value="Go" id="actionButton" action="#{myBean.doAction}" /> 
     </p:column> 
    </p:dataTable> 
</h:form> 

Möchten Sie eine Ahnung, wie zu haben, was das Problem sein könnte?

Antwort

1

Ich habe Ihre Schaltfläche Spaltencode zu einer bestehenden von mir zusammen mit einer Dummy-Methode in der Bean-Unterstützung hinzugefügt. Die Methode wird korrekt aufgerufen, wenn ich den Knopf richtig drücke. Hier ist der Code, den ich auf meine Datatable hinzugefügt:

<p:column> 
    <p:commandButton value="Go" id="actionButton" action="#{tableBean.buttonAction()}" /> 
</p:column> 

Hier wird die buttonAction Methode in meinem Backing Bean:

public void buttonAction() 
    { 
     int a = 0; 
     for(int i = 0; i < 100; i++) 
      a = i; 
    } 

ich auf diese Methode einen Haltepunkt setzen, damit ich weiß, es heißt immer, wenn Ich klicke auf den Knopf. Ich ging noch einen Schritt weiter und benutzte Ihren Datat-Code (mit meiner Datenquelle) und die Methode wird immer noch aufgerufen, wenn ich den Knopf drücke. Ich weiß nicht, welche Entwicklungsumgebung Sie verwenden, aber wenn es einen Debug-Modus hat, setzen Sie einen Haltepunkt für Ihre doAction-Methode und einige andere strategische Speicherorte in Ihrer Bean, dann führen Sie Ihr Projekt im Debug-Modus aus, um zu sehen, was vor sich geht .

+0

Danke für Ihre Hilfe Sean. Ich bin auf Tomcat 7, JSF 2.0, PrimeFaces 2.2RC1. Der offensichtliche Unterschied, den ich zwischen unseren Aufrufen sehen kann, ist, dass Sie "buttonAction()" mit Klammern aufrufen. Ich werde es versuchen und dich wissen lassen. –

+0

Scheint zu arbeiten :) Vielen Dank für Ihre Hilfe (obwohl es sich immer noch merkwürdig anfühlt, dass das Hinzufügen von Klammern es funktioniert). –

0

Ich denke, Sie ändern müssen:

<h:form id="compSearchForm"> 
<p:dataTable var="competency" value="#{competencySearchBean.matchingCompetencies.toArray()}"> 
    <p:column> 
     <f:facet name="header"> 
      <h:outputLabel value="Title" /> 
     </f:facet> 
     <h:outputText value="#{competency.title}" /> 
    </p:column> 
</p:dataTable> 
<p:commandButton value="Go" id="actionButton" action="#{myBean.doAction}" /> 
</h:form> 

Das glaube ich nicht, dass Sie auf die Schaltfläche in der Datatable haben. Versuche dies.

+0

Das funktioniert zwar, aber es ist nicht genau das, was ich gerne machen würde. Ich würde gerne eine Schaltfläche/Link/Symbol in jeder Zeile haben, und wenn der Benutzer darauf klickt, wird eine Aktion ausgeführt, die von den Zeilendaten abhängt. –

+0

Wenn Sie eine Naht verwenden, können Sie eine 's: -Taste verwenden, die wie gewünscht funktioniert. Dies liegt daran, dass GET und nicht POST ausgeführt werden. Sie können auch versuchen, die '' innerhalb der Datentabelle zu kapseln, so dass jede Zeile ihr eigenes Formular erhält, wenn Sie jede Zeile –

+0

schreiben möchten Ich habe versucht, ein neues f: Formular innerhalb der Datentabelle hinzuzufügen, aber wenn ich dies tun, ist nichts mehr angezeigt. Es gibt jedoch keinen JavaScript-Fehler, daher weiß ich nicht wirklich warum. –

0

hatte ich das gleiche Problem und nach verschiedenen Wegen versucht, beschloß ich, es durch meine List (die Liste, die ich in der p:datatable verwenden) Initialisierung im init Methode der Bean.

Mit diesem Formular geht die Liste auf die Seite mit einigen Werten.

Selbst wenn ich List<Paciente> myList = new ArrayList<Paciente>(); setzen, hat es nicht funktioniert. Ich muss einige Werte in die Liste eintragen. Das war der einzige Weg, das Problem zu lösen.

+0

Ich bezweifle ehrlich, dass diese Antwort in irgendeiner Weise mit diesem Problem verbunden ist. – Kukeltje

Verwandte Themen