2012-04-04 10 views
0

Ich habe eine Schleife Datensätze anzeigen, und ich möchte senden Schaltflächen zu allen Zeilen hinzufügen. Der Grund, warum sie eingereicht werden müssen, liegt darin, dass unten ein Formular vorhanden ist, das ich beibehalten möchte, wenn der Benutzer eine der Schaltflächen auswählt.Context-Parameter funktioniert nicht in Tapestry 5.3.2 für Submit

Ich habe die Kommentare über die Verwendung von Defer, etc, aber nichts scheint für mich zu arbeiten. Der aktuelle Code einreichen ich versuche:

<input t:id="deleteItem" t:type="submit" t:context="item.number.content" value="deleteItem" class="deleteItem" /> 

auf den Kontext zu erweitern: Der aktuelle Kontext I aufgeführt haben, ist nur eine Zeichenfolge innerhalb der Anzahl Objekt innerhalb des Item-Objekt. In der Tat wird es im obigen Code vollkommen in Ordnung angezeigt.

Um das anders zu testen, habe ich item.number.content durch eine getContext() -Methode ersetzen lassen und eine hartcodierte 1 zurückgegeben. Ich debugge dann diese Methode und sehe, dass sie aufgerufen wird, wenn die Seite gesendet wird. nicht wenn die Seite so gerendert wird, wie ich es erwartet hätte.

Der Kontext wird erst nach dem Drücken der Schaltfläche ausgefüllt. Versteh ich etwas falsch?

Edit:

Also mein Problem ist das Kontextwert mit bekommen. Nehmen wir zum Beispiel mein Code:

<t:loop source="itemsList" value="item" formState="none"> 
<!-- Display info here --> 
<input t:id="deleteItem" t:type="submit" t:context="myContext" value="deleteItem" class="deleteItem" /> 
</t:loop> 

Die Definition für getMyContext ist:

public String getMyContext() { 
    String context = item.getNumber().getContent(); 
    return context; 
} 

Das Problem ist, wird das Verfahren erst aufgerufen, nachdem die einreichen wurde, zu welchem ​​Zeitpunkt die Variable „Position“ gedrückt ist Null. Ich habe erwartet, dass getMyContext jedes Mal aufgerufen wird, wenn der Submit-Button gerendert wird. Wenn dann das Submit ausgewählt wird, wird das Event mit dem entsprechenden Kontext ausgelöst. Ist das sinnvoll?

+1

Was meinst du mit nie bevölkert? Wie rufen Sie den Kontext in Ihren Ereignishandlern ab? Kannst du diesen Code zur Frage hinzufügen? – joostschouten

+0

Danke, ich habe Folgendes hinzugefügt: Der aktuelle Kontext, den ich aufgelistet habe, ist nur eine Zeichenfolge innerhalb des Nummernobjekts innerhalb des Elementobjekts. In der Tat wird es im obigen Code vollkommen in Ordnung angezeigt. Um dies anders zu testen, habe ich item.number.content mit einer getContext() -Methode ersetzen und es eine hart-codierte 1 zurückgeben. Ich debuggen diese Methode und sehen, dass es aufgerufen wird, wenn die Seite gesendet wird, nicht wann Die Seite wird so gerendert, wie ich es erwartet hätte. – DSmyte

Antwort

3

ich endlich herausgefunden, was mein Problem war:

formState="none" 

Ich tat dies ursprünglich, weil es Probleme, wurde zwischen meinen Objekten und einem String zu übersetzen. Wenn dies ausgewählt ist, funktionieren die Senden-Schaltflächen nicht ordnungsgemäß. Ich änderte es schließlich in formState = "Iteration" und jetzt funktioniert es genau so, wie ich es erwartet hatte (und ich brauchte den Defer wie erwartet).

1

Versuchen das Hinzufügen der folgenden auf der Seite/Komponente Sie dieses T hinzu: unterbreiten:

@OnEvent(component = "deleteItem") 
private void handleSubmit(Integer contextValue) { 
    //Do whatever you need to do with the passed context value here. 
    //Most commonly you would store the context in a java page/component field to 
    //be used by the form eventhandler to do some sort of CRUD 
} 

Der Kontextwert wird nicht ausgeschrieben bekommen, während die Seite dargestellt wird, wird es als Parameter übergeben werden, um Ihre Event-Handler beim Senden des Formulars. Was Sie also sehen, ist korrektes Verhalten.

+0

Danke für die Antwort, aber es ist nicht die Behandlung des Ereignisses, das ist das Problem - es ist die Tatsache, dass es den Kontext erhält, wenn ich die Schaltfläche absende.Ich werde mehr in der Frage hinzufügen, um zu erklären, was ich meine, danke für die Hilfe! – DSmyte

+0

Ich bin mir ziemlich sicher, dass der Kontext im Formular beibehalten und weitergegeben werden sollte, wenn Sie auf "Senden" klicken. Ich habe mir die Quelle angeschaut und in deinem Fall brauchst du eine t: defer = "false", da deine Submit in einer Schleife ist. Schau es dir an: http://tapestry.apache.org/5.3.1/apidocs/org/apache/tapestry5/corelib/components/Submit.html – joostschouten

+0

Genau das habe ich mir gedacht - aber es passiert nicht, meine Kontextmethode ist es nicht aufgerufen, bis die Seite gerendert und eine Senden-Schaltfläche gedrückt wird. Ich bin wirklich ziemlich verwirrt, es scheint sehr geradlinig und ich bin nicht so neu in Tapestry. – DSmyte