문제

이음새 애플리케이션을 디버깅 할 때 매개 변수 통과가 어떻게 작동하는지 이해하지 못한다는 것은 나에게 새벽이됩니다. 다음 용어는 실제로 혼란 스러웠습니다. 그래서 나는 어떤 것들과 어떤 것들을 위해 무엇을 위해 무엇을 위해 작용하는지에 대한 좋은 설명을 얻기 위해이 일반적인 질문을하고 있습니다.

우선, 한 페이지에서 다음 페이지로 이동하려면 H : CommandButton 또는 S : 버튼을 사용할 수 있습니다. S : Button이 양식을 제출하지는 않지만 차이를 이해하는 데 도움이되지는 않습니다. 한 페이지에서 다음 페이지로 이동하여 양식을 제출하지 않는다면 무엇을하고 있습니까?

내 앱에는 양식으로 정보를 입력하고 버튼을 누른 다음 쿼리를 실행 한 후 결과를 표시하는 새 페이지로 이동합니다. 이 활동이 S : 버튼으로 발생하는 것을 본 것 같습니다. 그렇다면 어떻게 "양식을 제출하지 않는"경우 어떻게됩니까? 나는 여기서 근본적인 것을 놓치고 있다고 생각합니다.

매개 변수 자체는 ... 내가 본 것에서 3 가지 방법 중 하나를 사용하여 매개 변수를 전달할 수 있습니다.

  1. F : PARAM. 이것은 h : commandButton보다 s : 버튼이있는 콤보에서 더 자주 발생하는 것 같습니다. 왜 그런 겁니까?
  2. 또한 page.xml 파일을 사용하여 "전달"(또는 무언가) 매개 변수를 사용할 수 있습니다. 매개 변수는 URL에 표시되도록 소스 페이지.xml과 target page.xml에 모두 나타나야하는 것 같습니다.
  3. 마지막으로, @requestparameter 주석을 백킹 콩에 추가 할 수있는 옵션이 있습니다. 나는 당신이 당신의 관점에서 f : param을 설정할 때도 사용됩니다. 그것은 page.xml의 하나가 간과된다는 것을 의미합니까? 이음새 분포의 등록 예에서, 사용자 Bean은 f : param에 대해 page.xml을 통해 매개 변수를 전달하지 않고 채워집니다. 어떻게 가능합니까?

나는이 질문이 많은 무지를 보여준다고 확신한다.

잘만되면 웅변적인 사람들 중 한 명이 내가 요구하는 것을 "얻고"이 과정에 대한 설명을 해주기를 바랍니다.

미리 감사드립니다.

tdr

도움이 되었습니까?

해결책

한 페이지에서 다음 페이지로 이동하여 양식을 제출하지 않는다면 무엇을하고 있습니까?

양식 필드를 제출하지 않고 다른 페이지로 탐색합니다.

내 앱에는 양식으로 정보를 입력하고 버튼을 누른 다음 쿼리를 실행 한 후 결과를 표시하는 새 페이지로 이동합니다. 이 활동이 S : 버튼으로 발생하는 것을 본 것 같습니다.

S : 버튼은 양식을 제출하지 않으므로 페이지의 값이 모델에 적용되지 않습니다. 이를 위해서는 CommandButton/링크를 사용해야합니다. 당신이 본 활동은 이미 인구가 많은 값을 다른 페이지로 전달하는 것입니다.

F : PARAM

S : 버튼/링크와 함께 더 자주 사용되므로 종종 탐색에 사용됩니다. f : param을 사용하여 이미 인구가 많은 값을 다른 페이지로 전달할 수 있습니다. H : CommandButton/Link는 양식을 제출하는 데 사용되므로 값이 양식 필드에있게됩니다. 물론 F : Param을 사용하지 못하게하는 것은 없습니다.

page.xml

여기에 사용 된 매개 변수는 요청 매개 변수를 모델에 적용하고 그 반대도 마찬가지입니다.

@requestParameter

위의 모든 것과 함께 사용할 수 있지만 동일한 작업을 수행하는 데 사용할 수 있으므로 Page.xml Params와 함께 사용할 때는 약간 무의미합니다.

예시

이 페이지로 시작하면 :

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: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. The를 사용하여 Bean에서 메소드를 호출하십시오 action 기인하다.

내 앱에는 양식으로 정보를 입력하고 버튼을 누른 다음 쿼리를 실행 한 후 결과를 표시하는 새 페이지로 이동합니다. 이 활동이 S : 버튼으로 발생하는 것을 본 것 같습니다.

  1. @damo의 답변에 언급 된 바와 같이 <s:button> / <s:link> 양식을 제출하지 않으므로 두 번째 페이지에서 쿼리를 실행할 수 있지만 이전에 입력 한 데이터 없이는 확실히 쿼리를 실행할 수 있습니다.
  2. 그러나 당신이 사용한 경우 <a4j:support>/<a4j:ajax> 첫 번째 페이지에 입력 필드가있는 태그는 두 번째 페이지에서 해당 데이터에 오랫동안 실행되는 대화 내에 있거나 Bean이 세션 범위를 범한 경우에 해당 데이터에 액세스 할 수 있습니다. 두 번째 페이지에 양식 데이터가 표시되면 이유가 될 수 있습니다.

백킹 콩에 @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 속성은 "윌리엄"으로 설정됩니다. 그러나이 값은 "Tony"값으로 무시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top