다음과 같이 View Params를 정의하는 것의 차이점은 무엇입니까?
<f:metadata>
<f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
다음과 같이 ManagedBean에 속성을 정의합니다.
@ManagedProperty(value = "#{param.id}")
private Integer id;
답변
<f:viewParam>
:
-
모델 값 업데이트 단계 중에 만 값을 설정합니다 (확장 이후
UIInput
). -
에서는 설정 값을 사용할 수
@PostConstruct
없으므로 설정 값을 기준으로 초기화 / 사전로드를 수행하려면<f:event type="preRenderView" listener="#{bean.init}" />
내부에 추가가 필요<f:metadata>
합니다. JSF 2.2부터<f:viewAction>
대신 사용할 수 있습니다 . -
중첩
<f:converter>
및<f:validator>
보다 세분화 된 변환 / 검증을 허용합니다 . A도<h:message>
부착 할 수 있습니다. -
URL의
includeViewParams
속성<h:link>
또는includeViewParams=true
요청 매개 변수를 사용하여 GET 쿼리 문자열로 포함 할 수 있습니다 . -
@RequestScoped
Bean에서 사용할 수 있지만@ViewScoped
보기 매개 변수가보기에 포함 된 양식으로 인한 유효성 검증 실패에서 살아남 으려면 Bean이 있어야 합니다. 그렇지 않으면<f:param>
명령에서 후속 요청에 대한 모든 요청 매개 변수를 수동으로 보유해야합니다. 구성 요소.
예 :
<f:metadata>
<f:viewParam id="user_id" name="id" value="#{bean.user}"
required="true" requiredMessage="Invalid page access. Please use a link from within the system."
converter="userConverter" converterMessage="Unknown user ID."
/>
</f:metadata>
<h:message for="user_id" />
와
private User user;
및 @FacesConverter("userConverter")
. http://example.com/context/user.xhtml?id=123에 의한 호출 페이지 id
는 변환기를 통해 매개 변수를 전달 하고 User
객체를 빈 속성으로 설정합니다 .
@ManagedProperty
:
-
Bean 생성 직후 값을 설정합니다.
-
설정 값을 사용할
@PostConstruct
수있어 설정 값을 기반으로 다른 속성을 쉽게 초기화 / 사전로드 할 수 있습니다. -
보기에서 선언적 변환 / 검증을 허용하지 않습니다.
-
의 관리 속성은
#{param}
요청 범위보다 넓은 범위의 Bean에서 허용되지 않으므로 Bean은이어야합니다@RequestScoped
. -
#{param}
후속 POST 요청에 존재 하는 관리 속성에 의존하는 경우 구성 요소<f:param>
에 포함해야합니다UICommand
.
예 :
@ManagedProperty("#{param.id}")
private Long id;
private User user;
@EJB
private UserService userService;
@PostConstruct
public void init() {
user = userService.find(id);
}
하지만 당신은 할 때마다 확인을 직접 관리 할 필요가 user
있다 null
손보는에 의해 FacesContext#addMessage()
또는 뭔가.
및 둘 다 필수 인 경우 둘 다 사용할 수 있습니다 . 더 이상 세분화 된 변환 / 검증 만 적용 할 수 없습니다.@PostConstruct
includeViewParams
또한보십시오:
답변
2 가지 다른 차이점 :
@ManagedProperty
CDI (@Named
)가 관리하는 Bean이 아니라 JSF가 관리하는 Bean에서만 사용할 수 있습니다 .<f:viewParam>
GET 요청의 매개 변수에서만 작동합니다.