Nie rozumie parametrów przejścia w szwie

Gdy debuguję moją aplikację seam, dociera do mnie, że naprawdę nie rozumiem, jak działa przekazywanie parametrów. Poniższa terminologia naprawdę mnie zdezorientowała. Zadaję więc to bardzo ogólne Pytanie w nadziei na uzyskanie dobrego wyjaśnienia, co z czym działa i do czego służą pewne rzeczy.

Przede wszystkim, aby przejść z jednej strony na drugą, możesz użyć przycisku h: commandButton lub S: button. Rozumiem, że Przycisk s:nie wysyła formularza, ale to mi nie pomaga zrozumieć różnica. Jeśli nie przesyłasz formularza przechodząc z jednej strony na drugą, to co robisz?

Moja aplikacja polega na wpisaniu informacji w formularzu, naciśnięciu przycisku, a następnie przejściu do nowej strony, która wyświetla wyniki po uruchomieniu zapytania. Wygląda na to, że widziałem to działanie z przyciskiem s:, Więc jak to jest, jeśli nie jest to "przesyłanie formularza"? Czuję, że coś mi umyka.

Co do samych parametrów...z tego co widziałem możesz podaj parametry za pomocą jednej z 3 metod:

  1. F:param. Wydaje się, że występuje to częściej w kombi z przyciskiem S:niż h:commandbutton. Dlaczego?
  2. Możesz również "przekazać" (lub coś) parametry za pomocą swojej strony.plik xml. Wydaje się, że parametr musi pojawić się zarówno na stronie źródłowej.xml i strona docelowa.xml, aby wyświetlał się w adresie URL.
  3. na koniec jest możliwość dodania adnotacji @ RequestParameter do twojego zaplecza. Domyślam się, że jest również używany, gdy ustawiasz f: param w widoku. Czy to znaczy ten na stronie?XML zostaje przeoczony? Zauważyłem w przykładzie rejestracji dystrybucji seam, użytkownik Bean zostaje wypełniony bez żadnych parametrów przekazywanych przez stronę.xml dla f: param. Jak to możliwe?

Jestem pewien, że to pytanie ujawnia wiele ignorancji.

Mam nadzieję, że jeden z was elokwentnych ludzi "dostanie" to, o co proszę i da mi wyjaśnienie tego procesu.

Dzięki w naprzód.

TDR

Author: april26, 2009-10-21

2 answers

Jeśli nie wysyłasz formularza przez przechodząc z jednej strony na drugą, a następnie co robisz?

Przechodzenie do innej strony bez przesyłania pól formularza.

Moja aplikacja polega na wpisaniu informacji w formie, naciśnięcie przycisku, a następnie przejście do nowej strony, która wyświetla wyniki po uruchomieniu zapytania. Informatyka wygląda na to, że widziałem tę aktywność miejsce z przyciskiem s:

S: przycisk nie prześle formularza, więc wartości na Twoim strona nie zostanie zastosowana do modelu. Musisz użyć do tego przycisku/linku. Aktywność, którą możesz zobaczyć, polega na przekazaniu już wypełnionej wartości na inną stronę.

F:param

Używane częściej z s:button/link ponieważ są one często używane do nawigacji. Możesz użyć f: param, aby przekazać już wypełnioną wartość na inną stronę. h:commandButton/Link służy do przesyłania formularzy, więc wartości znajdują się w polach formularza. Oczywiście nic nie stoi na przeszkodzie, aby używać f: param do tego.

Strona.xml

Użyte tutaj paramy służą do zastosowania parametrów żądania do modelu i odwrotnie.

@RequestParameter

Może być używany w połączeniu ze wszystkimi powyższymi, ale jest trochę bezcelowy, gdy jest używany z page.xml params, ponieważ mogą być używane do tego samego zadania

Przykład

Jeśli zaczniesz od tej strony:

http://mydomain.com/myapp/home.seam?name=damo
I Dom.strona.XML ma:
<param name="name" value="#{person.name}"/>

Wtedy gdy strona zostanie załadowana person.setName("damo") będzie być wywołane, ponieważ w adresie URL znajduje się pasujący parametr żądania.

Możesz zapisać wartość param w linku do następnej strony:

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

Po kliknięciu linku i przejściu do http://mydomain.com/myapp/page2.seam I page2.strona.XML ma:

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

Wtedy someOtherBean.setName("damo") zostanie wywołany.

Page2 może mieć przycisk s: w ten sposób:

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

A metoda może być:

@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);
  }
}
Mam nadzieję, że to pomoże!
 27
Author: Damo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 13:30:51

Jest już świetna odpowiedź na to pytanie. Próbuję tylko dodać jakieś dodatkowe informacje.

Jeśli nie przesyłasz formularza przechodząc z jednej strony na drugą, to co robisz?

  1. już w odpowiedzi @ Damo
  2. wykonaj walidację po stronie klienta lub uruchom javascript przed przejściem do następnej strony za pomocą atrybutu onclick przycisku.
  3. wywołanie metody w bean używając atrybutu action.

Moja aplikacja polega na wpisaniu informacji w formularzu, naciśnięciu przycisku, a następnie przejściu do nowej strony, która wyświetla wyniki po uruchomieniu zapytania. Wygląda na to, że widziałem tę aktywność za pomocą przycisku s:

  1. Jak wspomniano w odpowiedzi @ Damo<s:button> / <s:link> nie przesyła formularza, więc możesz uruchomić zapytanie na drugiej stronie, ale na pewno bez wcześniej wprowadzonych danych.
  2. ale jeśli użyłeś <a4j:support>/<a4j:ajax> tagi z polami wejściowymi na pierwszej stronie, można uzyskać dostęp do tego dane na drugiej stronie, jeśli jesteś w trakcie długiej rozmowy lub jeśli fasola ma zasięg sesji. Jeśli widzisz dane formularza na drugiej stronie, może to być powód.

Istnieje możliwość dodania adnotacji @ RequestParameter do twojego zaplecza. Domyślam się, że jest również używany, gdy ustawisz f: param w swoim widoku. Czy to znaczy ten na stronie?XML zostaje przeoczony?

Tak, wartość ustawiona przez page.xml zostanie nadpisana. Spójrz na następujące przykład.
Załóżmy, że twój page.xml ma następującą linię.

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

A twoja fasola ma metody getter i setter dla właściwości name i definiujesz zmienną name jak poniżej.

@RequestParameter
String name;

Teraz, jeśli wywołasz stronę w ten sposób.

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

setName zostanie wywołany, a nazwa property zostanie ustawiona na "william".

Teraz Załóżmy, że zdefiniujesz swoją zmienną w ten sposób .

@RequestParameter("userName")
String name;

I wywołać stronę w ten sposób.

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

Wtedy nadal setName metoda jest wywołane I name właściwość jest ustawiona na "william". Ale wtedy ta wartość jest zastępowana przez wartość "tony".

 2
Author: prageeth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 05:52:27