답변:
는 <f:viewParam>
GET 매개 변수의 설정, 변환 및 검증을 관리합니다. 그것은 <h:inputText>
이지만 GET 매개 변수와 같습니다.
다음 예
<f:metadata>
<f:viewParam name="id" value="#{bean.id}" />
</f:metadata>
기본적으로 다음을 수행합니다.
id
.required
, validator
및 converter
속성을 사용 하고 와 같이 a <f:converter>
및 중첩 할 수 <f:validator>
있음 <h:inputText>
)#{bean.id}
값으로 표시되는 Bean 특성으로 설정 하거나 value
속성이없는 경우 이름에서 요청 속성으로 설정 하여보기에서 id
사용 가능하게 #{id}
하십시오.따라서 페이지를 열면 뷰가 렌더링되기 직전에 foo.xhtml?id=10
매개 변수 값 10
이이 방식으로 Bean에 설정됩니다.
유효성 검사와 관련하여 다음 예제에서는 매개 변수를 required="true"
10으로 설정하고 10과 20 사이의 값만 허용합니다. 유효성 검사에 실패하면 메시지가 표시됩니다.
<f:metadata>
<f:viewParam id="id" name="id" value="#{bean.id}" required="true">
<f:validateLongRange minimum="10" maximum="20" />
</f:viewParam>
</f:metadata>
<h:message for="id" />
<f:viewAction>
이것을 위해 사용할 수 있습니다 .
<f:metadata>
<f:viewParam id="id" name="id" value="#{bean.id}" required="true">
<f:validateLongRange minimum="10" maximum="20" />
</f:viewParam>
<f:viewAction action="#{bean.onload}" />
</f:metadata>
<h:message for="id" />
와
public void onload() {
// ...
}
는 <f:viewAction>
JSF 2.2합니다 (이 때문에 새로운 <f:viewParam>
이미 JSF 2.0부터 존재). 업그레이드 할 수 없다면 가장 좋은 방법은 <f:event>
대신 사용하는 것입니다.
<f:event type="preRenderView" listener="#{bean.onload}" />
그러나 이것은 모든 요청에서 호출됩니다 . 요청이 포스트 백이 아닌지 명시 적으로 확인해야합니다.
public void onload() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
"전환 / 검증 실패"사례도 건너 뛰려면 다음과 같이하십시오.
public void onload() {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
// ...
}
}
<f:event>
이 방법을 사용 하는 것은 본질적으로 해결 방법 / 해킹이므로 <f:viewAction>
JSF 2.2에서 소개 된 것입니다.
includeViewParams
속성을 설정 true
하거나 includeViewParams=true
요청 매개 변수 를 추가하여 탐색 링크에서보기 매개 변수를 "통과"할 수 있습니다 .
<h:link outcome="next" includeViewParams="true">
<!-- Or -->
<h:link outcome="next?includeViewParams=true">
위의 <f:metadata>
예제에서 기본적으로 다음 링크 를 생성 합니다.
<a href="next.xhtml?id=10">
원래 매개 변수 값으로
이 방법은 오직 요구 즉 next.xhtml
이 또한<f:viewParam>
, 바로 그 매개 변수에 그렇지 않으면 통과되지 않습니다.
는 <f:viewParam>
또한 "일반 HTML"GET 양식과 함께 사용할 수 있습니다.
<f:metadata>
<f:viewParam id="query" name="query" value="#{bean.query}" />
<f:viewAction action="#{bean.search}" />
</f:metadata>
...
<form>
<label for="query">Query</label>
<input type="text" name="query" value="#{empty bean.query ? param.query : bean.query}" />
<input type="submit" value="Search" />
<h:message for="query" />
</form>
...
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
...
</h:dataTable>
기본적 으로이 @RequestScoped
콩 :
private String query;
private List<Result> results;
public void search() {
results = service.search(query);
}
참고가 <h:message>
위한 <f:viewParam>
이 아닌 일반 HTML <input type="text">
! 또한 유효성 검사 또는 변환 오류가있는 경우 제출 된 값이 전혀 표시되지 않으므로 입력 값 이 비어 있으면 입력 값이 표시 #{param.query}
됩니다 #{bean.query}
. 이 구성은 JSF 입력 컴포넌트에는 유효하지 않습니다 (이미 "커버 아래").