Programing

h : button과 h : commandButton의 차이점

lottogame 2020. 11. 5. 07:40
반응형

h : button과 h : commandButton의 차이점


JSF 2 년의 차이 무엇 h:buttonh:commandButton?


<h:button>

<h:button>HTML을 생성합니다 <input type="button">. 생성 된 요소는 JavaScript를 outcome사용하여 HTTP GET 요청을 사용하여 속성이 제공하는 페이지로 이동합니다 .

<h:button value="GET button" outcome="otherpage" />

생성 할 것이다

<input type="button" onclick="window.location.href='/contextpath/otherpage.xhtml'; return false;" value="GET button" />

이것이 브라우저 주소 표시 줄의 (책갈피 할 수있는) URL 변경으로 끝나더라도 SEO 친화적이지 않습니다. 검색 봇은 onclick. 당신은 더 나은를 사용하는 것 <h:outputLink>또는 <h:link>SEO는 주어진 URL에 중요합니다. 필요한 경우 생성 된 HTML <a>요소 에 CSS를 삽입 하여 버튼처럼 보이게 할 수 있습니다.

outcome아래와 같이 속성에 메소드를 참조하는 EL 표현식을 넣을 수 있지만 ,

<h:button value="GET button" outcome="#{bean.getOutcome()}" />

그것은 것입니다 하지 버튼을 클릭 할 때 호출. 대신 생성 된 onclick코드에 포함 할 탐색 결과를 얻기위한 목적으로 버튼이 포함 된 페이지가 렌더링 될 때 이미 호출됩니다 . 에서 outcome="#{bean.action}"같이 액션 메서드 구문을 사용하려고 시도한 적이 있다면 javax.el.ELException : could not find property actionMethod in class com.example.Bean 에 직면하여이 실수 / 오해에 의해 이미 암시되었을 것 입니다.

POST 요청의 결과로 메서드를 호출하려면 <h:commandButton>대신 사용 하십시오 (아래 참조). 아니면 GET 요청의 결과로 메소드를 호출하려는 경우, 머리 를 호출 JSF는 페이지로드 콩 조치를 관리 하거나도를 통해 GET 요청 매개 변수가있는 경우 <f:param>, 어떻게 백업 빈에서 쿼리 문자열 URL 매개 변수 페이지로드에 GET 처리 할 ?


<h:commandButton>

<h:commandButton>HTML을 생성 <input type="submit">버튼을 기본적으로 제출하는 부모 <h:form>HTTP POST 방법과 호출에 부착 작업을 사용하여 action, actionListener및 / 또는 <f:ajax listener>(있는 경우)를. <h:form>필요합니다.

<h:form id="form">
    <h:commandButton id="button" value="POST button" action="otherpage" />
</h:form>

생성 할 것이다

<form id="form" name="form" method="post" action="/contextpath/currentpage.xhtml" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="form" value="form" />
    <input type="submit" name="form:button" value="POST button" />
    <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="...." autocomplete="off" />
</form>

따라서 현재 페이지에 제출됩니다 (양식 작업 URL이 브라우저 주소 표시 줄에 표시됨). 나중에 브라우저 주소 표시 줄의 URL을 변경하지 않고 대상 페이지로 전달 합니다. ?faces-redirect=true결과 값에 매개 변수를 추가 하여 POST 후 리디렉션을 트리거하여 ( Post-Redirect-Get 패턴에 따라 ) 대상 URL이 북마크 가능하게 될 수 있습니다.

<h:commandButton>일반적으로 전용하는 POST 양식을 제출 페이지에 페이지 탐색을 수행하지 않도록 사용된다. 일반적으로 결과 action를 반환하는 양식 데이터를 DB에 저장하는 것과 같은 일부 비즈니스 작업을 가리 킵니다 String.

<h:commandButton ... action="#{bean.save}" />

public String save() {
    // ...
    return "otherpage";
}

돌아가 null거나 void같은보기로 돌아갑니다. 빈 문자열도 반환하지만 뷰 범위 빈을 다시 생성합니다. 요즘에는 현대적인 JSF2 및를 사용하여 <f:ajax>종종 결과가 ajax에 의해 조건부로 렌더링되는 동일한 뷰 (따라서 null또는 void)로 돌아갑니다 .

public void save() {
    // ...
}

또한보십시오:


h:button-클릭하면 h:button북마크 가능한 GET요청 발행 됩니다.

h:commandbutton-get 요청 대신 h:commandbutton양식 데이터를 서버로 다시 보내는 POST 요청을 발행합니다.


h : commandButton은 ah : form으로 묶어야하며 두 가지 탐색 방법이 있습니다. 즉, action 속성을 설정하여 정적이고 actionListener 속성을 설정하여 동적이므로 다음과 같이 고급입니다.

<h:form>
    <h:commandButton action="page.xhtml" value="cmdButton"/>
</h:form>

이 코드는 다음 html을 생성합니다.

<form id="j_idt7" name="j_idt7" method="post" action="/jsf/faces/index.xhtml" enctype="application/x-www-form-urlencoded">

h : button은 더 간단하며 다음과 같이 정적 또는 규칙 기반 탐색에 사용됩니다.

<h:button outcome="page.xhtml" value="button"/>

생성 된 HTML은

 <title>Facelet Title</title></head><body><input type="button" onclick="window.location.href='/jsf/faces/page.xhtml'; return false;" value="button" />

이 책 은 Ed Burns & Chris Schalk의 The Complete Reference 에서 발췌 한 것입니다.

h : commandButton 대 h : button

h : commandButton | h : commandLinkh : button | h : link 의 차이점은 무엇입니까 ?

마지막 두 구성 요소는 2.0View Parameters 기능과 함께 사용할 때 북마크 가능한 JSF 페이지를 활성화하기 위해 도입되었습니다 .

There are 3 main differences between h:button|h:link and h:commandButton|h:commandLink.

First, h:button|h:link causes the browser to issue an HTTP GET request, while h:commandButton|h:commandLink does a form POST. This means that any components in the page that have values entered by the user, such as text fields, checkboxes, etc., will not automatically be submitted to the server when using h:button|h:link. To cause values to be submitted with h:button|h:link, extra action has to be taken, using the “View Parameters” feature.

The second main difference between the two kinds of components is that h:button|h:link has an outcome attribute to describe where to go next while h:commandButton|h:commandLink uses an action attribute for this purpose. This is because the former does not result in an ActionEvent in the event system, while the latter does.

Finally, and most important to the complete understanding of this feature, the h:button|h:link components cause the navigation system to be asked to derive the outcome during the rendering of the page, and the answer to this question is encoded in the markup of the page. In contrast, the h:commandButton|h:commandLink components cause the navigation system to be asked to derive the outcome on the POSTBACK from the page. This is a difference in timing. Rendering always happens before POSTBACK.


Here is what the JSF javadocs have to say about the commandButton action attribute:

MethodExpression representing the application action to invoke when this component is activated by the user. The expression must evaluate to a public method that takes no parameters, and returns an Object (the toString() of which is called to derive the logical outcome) which is passed to the NavigationHandler for this application.

It would be illuminating to me if anyone can explain what that has to do with any of the answers on this page. It seems pretty clear that action refers to some page's filename and not a method.

참고URL : https://stackoverflow.com/questions/13070537/difference-between-hbutton-and-hcommandbutton

반응형