2011-10-17 3 views
4

나는 <f:viewParam> 구동 검색 화면을 가지고 있습니다. 단일 <f:viewParam>에 대해 여러 값을 사용하도록 구현하려고합니다. 내가 backingBean에서 다음 두 방법 서명을 시도f : 여러 값을 가진 viewParam

<f:metadata> 
    <f:viewParam name="state" 
     value="#{backingBean.state}" 
     converter="#{stateNameConverter}" /> 
</f:metadata> 

:

public void setState(State... state) 

나는 다음과 같이 올바른 URL이 XHTML 부분이

<url>?state=COMPLETE&state=PENDING 

같이 보일 것입니다 생각

JSF 구현이 값에 대한 배열을 작성하고 뒷받침 콩. JSF 구현은 열거 형 배열을 열거 형으로 변환 할 수 없다는 오류와 함께 실패했습니다.

public void setState(State state) 

아마도 JSF 구현은 변환 된 값을 URL에서 찾은대로 설정합니다. 첫 번째 값만 설정되었습니다.

stateNameConverterStringenum 값 사이를 변환합니다.

JSF 2에서 <f:viewParam>에 대해 여러 값을 사용할 수 있습니까?

답변

6

아니요, 불행히도 <f:viewParams>과 같은 태그가 없습니다.

@Override 
public void decode(FacesContext context) { 
    if (context == null) { 
     throw new NullPointerException(); 
    } 

    // QUESTION can we move forward and support an array? no different than UISelectMany; perhaps need to know 
    // if the value expression is single or multi-valued 
    // ANSWER: I'd rather not right now. 
    String paramValue = context.getExternalContext().getRequestParameterMap().get(getName()); 

    // submitted value will stay as previous value (null on initial request) if a parameter is absent 
    if (paramValue != null) { 
     setSubmittedValue(paramValue); 
    } 

    rawValue = (String) getSubmittedValue(); 
    setValid(true); 

} 

이 현재 가장 좋은 건이 @PostConstruct 또는 <f:viewAction> 나에 ExternalContext#getRequestParameterValuesMap()에서 값을 직접 수집하는 것입니다 해결하기 위해 : 것을 확인 인 Mojarra의 UIViewParameter#decode() 구현 주석 ( <f:viewParam> 태그 뒤에있는 코드는)도 있습니다 String[] 속성의 @ManagedProperty("#{paramValues.state}") 일 수 있습니다.

달성 할 수있는 맞춤 <my:viewParams> 태그를 만들 수도 있지만 이는 그리 간단하지 않습니다.

+0

감사합니다. 나는 정보 수집을 위해 갈 것이다. – fransvn