Question

Au moment de déboguer mon application de couture, je me rends compte que je ne comprends pas vraiment comment fonctionne le passage de paramètres. La terminologie suivante m'a vraiment dérouté. Je pose donc cette question très générale dans l’espoir d’obtenir une bonne explication de ce qui fonctionne avec quoi et à quoi certaines choses servent.

Tout d’abord, vous pouvez utiliser les boutons h: commandButton ou s: button pour passer d’une page à l’autre. Je comprends que s: button ne soumet pas de formulaire, mais cela ne m’aide pas à comprendre la différence. Si vous ne soumettez pas un formulaire en passant d’une page à l’autre, que faites-vous?

Mon application implique la saisie d'informations dans un formulaire, la sélection d'un bouton, puis le passage à une nouvelle page affichant les résultats après l'exécution d'une requête. Il semble que j'ai vu cette activité se dérouler avec le bouton s:, alors comment se fait-il que si ce n'est pas & "Soumettre un formulaire &"; Je sens que je manque quelque chose de fondamental ici.

En ce qui concerne les paramètres eux-mêmes ... d'après ce que j'ai vu, vous pouvez passer les paramètres en utilisant l'une des 3 méthodes suivantes:

  1. f: param. Cela semble se produire plus souvent en combinaison avec s: button que h: commandbutton. Pourquoi est-ce?
  2. De même, vous pouvez " passer " (ou quelque chose) paramètres en utilisant votre fichier page.xml. Le paramètre semble devoir apparaître à la fois dans le fichier source page.xml et dans le fichier cible page.xml pour pouvoir apparaître dans l'URL.
  3. Enfin, il est possible d’ajouter une annotation @RequestParameter à votre bean de support. Je suppose que cela est également utilisé lorsque vous définissez f: param à votre avis. Cela signifie-t-il que celui de page.xml est négligé? Je remarque dans l'exemple d'enregistrement de la distribution de couture, que le bean utilisateur est rempli sans qu'aucun paramètre ne soit passé via page.xml pour f: param. Comment est-ce possible?

Je suis sûr que cette question révèle beaucoup d’ignorance.

Espérons que l’un de vous, personnes éloquentes, & "obtiendra &"; ce que je demande et donnez-moi une explication de ce processus.

Merci d'avance.

TDR

Était-ce utile?

La solution

  

Si vous ne soumettez pas de formulaire avant le   passant d'une page à l'autre, puis   tu fais quoi?

Accéder à une autre page sans soumettre de champs de formulaire.

  

Mon application implique la saisie d'informations   sous une forme, en appuyant sur un bouton, puis   aller à une nouvelle page qui affiche   résultats après l'exécution d'une requête. Il   semble avoir vu cette activité prendre   placer avec s: bouton

s: button ne soumettra pas le formulaire, les valeurs de votre page ne seront donc pas appliquées au modèle. Vous devez utiliser un bouton de commande / lien pour cela. L'activité que vous avez peut-être vue passe une valeur déjà renseignée dans une autre page.

f: param

Utilisé plus souvent avec s: button / link car ils sont souvent utilisés pour la navigation. Vous pouvez utiliser f: param pour transmettre une valeur déjà renseignée à une autre page. h: le bouton de commande / lien est utilisé pour la soumission de formulaires afin que les valeurs soient dans les champs de formulaire. Bien sûr, rien ne vous empêche d’utiliser f: param pour cela.

page.xml

les paramètres utilisés ici servent à appliquer des paramètres de requête au modèle et inversement.

@RequestParameter

Peut être utilisé avec tout ce qui précède, mais est un peu inutile lorsqu'il est utilisé avec les paramètres page.xml car ils peuvent être utilisés pour le même travail

Exemple

Si vous commencez par cette page:

http://mydomain.com/myapp/home.seam?name=damo

Et le home.page.xml a:

<param name="name" value="#{person.name}"/>

Ensuite, lorsque la page sera chargée, person.setName("damo") sera appelé car il existe un paramètre de requête correspondante dans l'URL.

Vous pouvez stocker la valeur du paramètre dans le lien vers la page suivante:

<s:link value="Go to Page 2" view="/page2.xhtml">
  <f:param name="name" value="#{person.name}"/>
</s:link>

Lorsque vous cliquez sur le lien et accédez à http://mydomain.com/myapp/page2.seam Et le page2.page.xml a:

<param name="name" value="#{someOtherBean.name}"/>

Ensuite, someOtherBean.setName("damo") sera appelé.

La page2 peut avoir un bouton s: comme ceci:

<s:button value="Say Hello" action="#{someOtherBean.sayHello}">
  <f:param name="subject" value="#{someOtherBean.name}"/>
</s:button>

Et la méthode pourrait être:

@Name("someOtherBean")
public class SomeOtherBean {

  @RequestParameter("subject")  //same value as the 'name' in f:param
  private String subject;

  public void sayHello() {
    System.out.println("Hello "+subject);
  }
}

J'espère que ça aide!

Autres conseils

Il existe déjà une excellente réponse à cette question. J'essaie simplement d'ajouter des informations supplémentaires.

  

Si vous ne soumettez pas un formulaire en passant d’une page à l’autre, que faites-vous?   

  1. Déjà analysé dans la réponse de @ Damo
  2. Effectuez une validation côté client ou exécutez un javascript avant de passer à la page suivante à l'aide de onclick l'attribut du bouton.
  3. Appelez une méthode dans un bean en utilisant l'attribut action.
  

Mon application implique la saisie d'informations dans un formulaire, la sélection d'un bouton, puis le passage à une nouvelle page affichant les résultats après l'exécution d'une requête. Il semble que j’ai vu cette activité se dérouler avec s: button

  1. Comme mentionné dans la réponse de @Damo, <s:button> / <s:link> n'envoie pas le formulaire, vous pouvez donc exécuter votre requête en deuxième page, mais sûrement sans les données saisies auparavant.
  2. Mais si vous avez utilisé des balises <a4j:support> / <a4j:ajax> avec les champs de saisie de votre première page, vous pouvez accéder à ces données dans votre deuxième page si vous êtes dans une longue conversation ou si votre bean est à périmètre de session. Si vous voyez les données du formulaire sur votre deuxième page, cela pourrait en être la raison.
  

Il est possible d’ajouter une annotation @RequestParameter à votre bean de support. Je suppose que cela est également utilisé lorsque vous définissez f: param à votre avis. Cela signifie-t-il que celui de page.xml est oublié?

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Oui, la valeur définie par le paramètre page.xml sera remplacé. Regardez l'exemple suivant.
Supposons que votre getter a la ligne suivante.

<param name="name" value="#{myBean.name}"/>

et votre bean a setter et name des méthodes pour la propriété setName et vous définissez la variable property comme suit.

@RequestParameter
String name;

Maintenant, si vous appelez la page comme ceci.

http://...../app_name/home.seam?name=william

le <=> sera appelé et le nom <=> est défini sur & "william &";.

.

Supposons maintenant que vous définissiez votre variable comme ceci.

@RequestParameter("userName")
String name;

Et appelez la page comme ceci.

http://...../app_name/home.seam?name=william&userName=tony

La <=> méthode est encore appelée et la propriété <=> est définie sur & "william &"; Mais alors cette valeur est remplacée par la valeur & Quot; tony & Quot;.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top