Вопрос

Когда я отлаживаю свое приложение seam, до меня доходит, что я на самом деле не понимаю, как работает передача параметров.Следующая терминология действительно сбивает меня с толку.Поэтому я задаю этот очень общий вопрос в надежде получить хорошее объяснение того, что с чем работает и для чего предназначены определенные вещи.

Прежде всего, чтобы перейти с одной страницы на следующую, вы можете использовать h: CommandButton или s:button.Я понимаю, что s: button не отправляет форму, но это не помогает мне понять разницу.Если вы не отправляете форму, переходя с одной страницы на другую, тогда что вы делаете?

Мое приложение включает в себя ввод информации в форму, нажатие кнопки, а затем переход на новую страницу, которая отображает результаты после выполнения запроса.Кажется, я видел, как это действие выполнялось с помощью кнопки s:, так как же это, если это не "отправка формы"?Я чувствую, что мне здесь не хватает чего-то фундаментального.

Что касается самих параметров...из того, что я видел, вы можете передавать параметры, используя один из 3 методов:

  1. ф: параметр.Похоже, это чаще встречается в комбинации с s: button, чем h: commandbutton.Почему это?
  2. Кроме того, вы можете "передать" (или что-то еще) параметры, используя свой файл page.xml.Параметр, похоже, должен отображаться как в источнике page.xml, так и в цели page.xml чтобы он отображался в URL.
  3. Наконец, есть возможность добавить аннотацию @RequestParameter к вашему вспомогательному компоненту.Я полагаю, это также используется, когда вы устанавливаете f: param в своем представлении.Означает ли это, что тот, что в page.xml, упускается из виду?Я замечаю, что в примере регистрации распределения seam пользовательский компонент заполняется без передачи каких-либо параметров через page.xml для f: param .Как это возможно?

Я уверен, что этот вопрос свидетельствует о большом невежестве.

Надеюсь, кто-нибудь из вас, красноречивых людей, "поймет", о чем я спрашиваю, и объяснит мне этот процесс.

Заранее благодарю.

TDR

Это было полезно?

Решение

Если вы не отправляете форму, переходя с одной страницы на другую, тогда что вы делаете?

Переход на другую страницу без отправки каких-либо полей формы.

Мое приложение включает в себя ввод информации в форму, нажатие кнопки, а затем переход на новую страницу, которая отображает результаты после выполнения запроса.Это кажется, я видел, как это действие выполняется место с помощью кнопки s:

субъекты: кнопка не отправит форму, поэтому значения на вашей странице не будут применены к модели.Для этого вы должны использовать CommandButton / Ссылку.Действие, которое вы, возможно, видели, заключается в передаче уже заполненного значения на другую страницу.

f: параметр

Чаще используется с s:button/link поскольку они часто используются для навигации.Вы можете использовать f:param для передачи уже заполненного значения на другую страницу.h:commandButton/Link используется для отправки форм, поэтому значения находятся в полях формы.Конечно, ничто не мешает вам использовать f:param для этого, чтобы.

page.xml

параметры, используемые здесь, предназначены для применения параметров запроса к модели и наоборот.

@Параметр запроса

Может использоваться в сочетании со всем вышеперечисленным, но немного бессмысленно при использовании с page.xml параметрами, поскольку они могут использоваться для выполнения одной и той же работы

Пример

Если вы начнете с этой страницы:

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

И home.page.xml имеет:

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

Затем, когда страница будет загружена person.setName("damo") будет вызван, так как в URL есть соответствующий параметр запроса.

Вы можете сохранить значение параметра в ссылке на следующую страницу:

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

Когда вы нажимаете на ссылку и переходите к http://mydomain.com/myapp/page2.seam И page2.page.xml имеет:

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

Тогда someOtherBean.setName("damo") будет вызван.

На странице 2 может быть кнопка s:, подобная этой:

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

И этот метод мог бы быть:

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

Надеюсь, это поможет!

Другие советы

На этот вопрос уже есть отличный ответ.Я просто пытаюсь добавить немного дополнительной информации.

Если вы не отправляете форму, переходя с одной страницы на другую, тогда что вы делаете?

  1. Уже исключено в ответе @Damo
  2. Выполните проверку на стороне клиента или запустите javascript перед переходом на следующую страницу с помощью onclick атрибут кнопки.
  3. Вызовите метод в bean, используя action атрибут.

Мое приложение включает в себя ввод информации в форму, нажатие кнопки, а затем переход на новую страницу, которая отображает результаты после выполнения запроса.Кажется, я видел, как это действие выполнялось с помощью кнопки s:

  1. Как упоминалось в ответе @Damo <s:button> / <s:link> не отправляет форму, поэтому вы можете выполнить свой запрос на второй странице, но, конечно, без ранее введенных данных.
  2. Но если вы использовали <a4j:support>/<a4j:ajax> используя теги с полями ввода на вашей первой странице, вы можете получить доступ к этим данным на вашей второй странице, если вы находитесь в длительном диалоге или если ваш компонент находится в области сеанса.Если вы видите данные формы на своей второй странице, это может быть причиной.

Существует возможность добавления аннотации @RequestParameter к вашему вспомогательному компоненту.Я полагаю, это также используется, когда вы устанавливаете f: param в своем представлении.Означает ли это, что тот, что в page.xml, упускается из виду?

        Да, значение, установленное с помощью page.xml будет переопределен.Посмотрите на следующий пример.
Предположим, что ваш page.xml имеет следующую строку.

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

и ваш боб имеет getter и setter методы для name свойство, и вы определяете переменную name как показано ниже.

@RequestParameter
String name;

Теперь, если вы вызовете страницу следующим образом.

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

в setName будет называться и название property установлено значение "уильям".

Теперь предположим , что вы определяете свою переменную следующим образом .

@RequestParameter("userName")
String name;

И назовите страницу вот так.

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

Затем все еще setName вызывается метод, и name для свойства установлено значение "william".Но затем это значение переопределяется значением "tony".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top