Не понимаю параметры прохождения в шве

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

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

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

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

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

Я уверен, что этот вопрос обнаруживает много невежества.

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

Спасибо заранее.

TDR

Ответы

Ответ 1

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

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

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

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

е: пары

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

page.xml

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

@RequestParameter

Может использоваться в сочетании со всем вышеперечисленным, но немного бессмысленно при использовании с параметрами 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").

Page2 может быть такая кнопка 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);
  }
}

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

Ответ 2

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

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

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

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

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

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

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

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

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

@RequestParameter
String name;

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

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

будет вызываться setName, а имя property - "william".

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

@RequestParameter("userName")
String name;

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

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

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