2010-03-01 7 views
2

j'ai un a4j:commandButton qui ressemble à ceComment utiliser RichFaces a4j: ne pas utiliser commandButton soumettre

<a4j:commandButton id="stopBtn" type="button" reRender="lastOp" 
    action="#{MyBacking.stop}" value="Stop" /> 
</a4j:commandButton> 

Lorsque l'application est déployée, et le bouton cliqué, la méthode stop() n'est pas appelé. Tous les a4j:commandButton exemples font référence à des formes, mais ce bouton est sous une forme - c'est un bouton que l'utilisateur va utiliser pour que le serveur pour exécuter une logique back-end. À l'heure actuelle, la méthode est

public void stopNode() { 
logger.info("STOPPING"); 
setLastOp("Stopped."); 
} 

D'autres méthodes qui ne pas utiliser ce type de bouton actualisent le champ lastOp, mais je ne vois rien sur la console avec celui-ci. Ai-je raison de lancer ceci comme un bouton? Devrais-je mettre ceci dans un tag h:form?

La console Firebug dit:

this._form is null 

que je ne comprends pas.

Toute aide bien appréciée.

Répondre

7

UICommand composants doivent être placés à l'intérieur d'un composant UIForm. Donc, votre estimation

Dois-je mettre cela dans un tag h:form?

est tout à fait correct :) Ce feu parce qu'ils POST une demande et la seule façon (normal) pour qui utilise un élément HTML <form> dont method attribut est réglé sur "post". Firebug dit aussi qu'un élément de formulaire parent est été prévu, mais il a décidé de null et donc aucune action ne peut être eu lieu.

Seuls les liens "plain vanilla" comme h:outputLink et consorts n'ont pas besoin d'un formulaire, car ils déclenchent simplement une requête GET.

2

Oui, l'envelopper dans une forme. Je suis sûr que BalusC affichera une explication détaillée pendant que je tape ma réponse. (oui, il est)

Je dois vous demander pourquoi vous n'avez pas essayé d'abord un formulaire, avant de poster ici.

+0

Pour être honnête, je pensais à deux choses à la fois, et aurait édité la question après l'avoir essayé sauf la fin de ma journée de travail est venu et j'étais à la porte. +1 pour votre observation .. – volvox

1

Regardez votre code:

<a4j:commandButton id="stopBtn" type="button" reRender="lastOp" action="#{MyBacking.stop}" value="Stop" /> 

Vous avez terminé <a4j:commandButton avec />, pourquoi ont besoin que orphelins </a4j:commandButton>?

1

Si pour une raison quelconque, vous ne voulez pas placer le bouton dans un formulaire, vous pouvez faire quelque chose comme ceci:

<a4j:commandButton onclick="fireAjax()"/> 

<h:form> 
    <a4j:jsFunction name="fireAjax" action=".."/> 
</h:form> 
Questions connexes