Не понимаю параметры прохождения в шве
Когда я отлаживаю приложение для шва, мне приходит в голову, что я действительно не понимаю, как работает передача параметров. Следующая терминология действительно меня смутила. Поэтому я задаю этот очень общий вопрос в надежде получить хорошее объяснение того, что работает с тем, что и какие определенные вещи для.
Прежде всего, чтобы перейти с одной страницы на другую, вы можете использовать кнопку 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". Но тогда это значение переопределяется значением "тони".