Domanda

Mentre eseguo il debug della mia applicazione Seam, mi rendo conto che non capisco davvero come funzioni il passaggio dei parametri. La seguente terminologia mi ha davvero confuso. Quindi sto ponendo questa domanda molto generale nella speranza di ottenere una buona spiegazione di ciò che funziona con cosa ea cosa servono determinate cose.

Prima di tutto, per passare da una pagina all'altra puoi usare h: commandButton o s: button. Capisco che il tasto s: non invia un modulo, ma ciò non mi aiuta a capire la differenza. Se non stai inviando un modulo passando da una pagina all'altra, cosa stai facendo?

La mia app prevede l'immissione di informazioni in un modulo, la pressione di un pulsante e quindi l'accesso a una nuova pagina che visualizza i risultati dopo l'esecuzione di una query. Mi sembra di aver visto questa attività svolgersi con il tasto s: quindi come mai se non è & Quot; invio di un modulo & Quot ;? Sento che mi manca qualcosa di fondamentale qui.

Per quanto riguarda i parametri stessi ... da quello che ho visto puoi passare i parametri usando uno dei 3 metodi:

  1. f: param. Questo sembra accadere più spesso in combo con s: button di h: commandbutton. Perché?
  2. Inoltre, puoi " passare " (o qualcosa) parametri usando il tuo file page.xml. Sembra che il parametro debba comparire sia nel page.xml di origine che nel page.xml di destinazione per visualizzarlo nell'URL.
  3. Infine, c'è la possibilità di aggiungere l'annotazione @RequestParameter al proprio backing bean. Ho capito che viene utilizzato anche quando si imposta f: param nella vista. Significa che quello in page.xml viene trascurato? Noto nell'esempio di registrazione della distribuzione di Seam, il bean utente viene popolato senza che nessun parametro venga passato tramite page.xml per f: param. Com'è possibile?

Sono sicuro che questa domanda rivela molta ignoranza.

Speriamo che una di voi persone eloquenti " ottenga " quello che sto chiedendo e mi dia una spiegazione di questo processo.

Grazie in anticipo.

TDR

È stato utile?

Soluzione

  

Se non si invia un modulo entro   passando da una pagina all'altra, quindi   cosa stai facendo?

Navigazione verso un'altra pagina senza inviare campi di modulo.

  

La mia app prevede l'inserimento di informazioni   in una forma, premendo un pulsante e poi   andare a una nuova pagina che viene visualizzata   risultati dopo aver eseguito una query. esso   sembra che ho visto prendere questa attività   posiziona con il tasto s:

s: il pulsante non invierà il modulo, quindi i valori nella tua pagina non verranno applicati al modello. Per questo è necessario utilizzare un CommandButton / Link. L'attività che potresti aver visto sta passando un valore già popolato a un'altra pagina.

f: param

Utilizzato più spesso con s: button / link in quanto questi vengono spesso utilizzati per la navigazione. Puoi usare f: param per passare un valore già popolato su un'altra pagina. h: commandButton / Link viene utilizzato per l'invio dei moduli, quindi i valori si trovano nei campi del modulo. Ovviamente non c'è nulla che ti impedisca di usare f: param per questo a

page.xml

i parametri usati qui sono per applicare i parametri di richiesta al modello e viceversa.

@RequestParameter

Può essere usato insieme a tutto quanto sopra ma è un po 'inutile se usato con i parametri page.xml in quanto possono essere usati per fare lo stesso lavoro

Esempio

Se inizi con questa pagina:

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

E home.page.xml ha:

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

Quindi quando la pagina viene caricata verrà chiamato person.setName("damo") poiché nell'URL è presente un parametro di richiesta corrispondente

È possibile memorizzare il valore del parametro nel collegamento alla pagina successiva:

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

Quando fai clic sul link e vai a http://mydomain.com/myapp/page2.seam E page2.page.xml ha:

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

Quindi verrà chiamato someOtherBean.setName("damo").

Pagina2 può avere un pulsante s: come questo:

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

E il metodo potrebbe essere:

@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);
  }
}

Spero che questo aiuti!

Altri suggerimenti

C'è già un'ottima risposta per questa domanda. Sto solo cercando di aggiungere alcune informazioni extra.

  

Se non stai inviando un modulo passando da una pagina all'altra, cosa stai facendo?   

  1. Già rinviato nella risposta di @ Damo
  2. Esegui una convalida lato client o esegui un javascript prima di passare alla pagina successiva utilizzando onclick l'attributo del pulsante.
  3. Chiama un metodo nel bean usando l'attributo action.
  

La mia app prevede l'immissione di informazioni in un modulo, la pressione di un pulsante e quindi l'accesso a una nuova pagina che visualizza i risultati dopo l'esecuzione di una query. Sembra che ho visto questa attività svolgersi con il tasto s:

  1. Come indicato nella risposta di @Damo <s:button> / <s:link> non invia il modulo, quindi è possibile eseguire la query nella seconda pagina ma sicuramente senza dati precedentemente inseriti.
  2. Ma se hai usato i tag <a4j:support> / <a4j:ajax> con i campi di input nella tua prima pagina, puoi accedere a quei dati nella tua seconda pagina se sei all'interno di una conversazione di lunga durata o se il tuo bean è nell'ambito della sessione. Se vedi i dati del modulo nella tua seconda pagina, questo potrebbe essere il motivo.
  

Esiste la possibilità di aggiungere l'annotazione @RequestParameter al backing bean. Ho capito che viene utilizzato anche quando si imposta f: param nella vista. Significa che quello in page.xml viene trascurato?

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Sì, il valore impostato tramite page.xml verrà sostituito. Guarda l'esempio seguente.
Supponiamo che il tuo getter abbia la seguente riga.

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

e il tuo bean ha setter e name metodi per la proprietà setName e tu definisci la variabile property come sotto.

@RequestParameter
String name;

Ora se chiami la pagina in questo modo.

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

verrà chiamato <=> e il nome <=> è impostato su " william " ;.

Ora supponi di definire la tua variabile in questo modo.

@RequestParameter("userName")
String name;

E chiama la pagina in questo modo.

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

Quindi viene ancora chiamato il metodo <=> e la proprietà <=> è impostata su " william " ;. Ma poi questo valore viene sovrascritto dal valore & Quot; tony & Quot ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top