답변:
<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
@ManagedProperty
요청 매개 변수를 불가능 하게 만드는 경우 에만.
<f:event type="preRenderView">
또는 곧 출시 될 JSF 2.2에 의해 호출되는 리스너 메소드에서 사용할 수 있습니다 <f:viewAction>
.
2 가지 다른 차이점 :
@ManagedProperty
CDI ( @Named
)가 관리하는 Bean이 아니라 JSF가 관리하는 Bean에서만 사용할 수 있습니다 .
<f:viewParam>
GET 요청의 매개 변수에서만 작동합니다.