2013-06-24 4 views
3

사용자 정의 클래스 CarString 사이에 이미 변환기가 있습니다.f : viewparam이 값 목록을 처리하도록 만드는 방법이 있습니까?

mybean.carsSet<Car> 또는 List<Car> 대신에 단지 하나의 Car 때 우아하게 문자열의 차의 목록과 목록 사이 커스텀 컨버터를 작성하지 않고도,이

<f:viewParam name="mycars" value="#{mybean.cars}" converter="carConverter" /> 

작품을 만들 수있는 방법이 있습니까? 즉, 나를 "[Audi,BMW,VW]"에서 ["Audi","BMW","VW"]으로 구문 분석 한 다음 하나씩 변환해야하는 (또는 그 반대) JSF의 기능이 있습니까?

<f:viewParam name="mycars" value="#{mybean.cars}" converter="carConverter" list="true" /> 

감사합니다 같은이 있다면

나는 그것을 좋아할 것이다!

추신 : 나는 this post about converters and selectManyMenu을 보았고 실제로 실제로 사용하는 또 다른 상황에서는 모든 것이 잘 작동합니다. selectManyMenu는 하나씩 변환을 처리합니다. 하지만 지금은 viewParam이 내 목록을 URL로 전달해야합니다.

답변

4

아니요, <f:viewParam>이 아니며 여러 값을 갖는 단일 매개 변수를 지원하거나 처리하지 않습니다. 이것은 심지어 its decode() method에 숨겨진 주석에서 확인 인 Mojarra의 경우에 (! 요청에 범위 콩을)

213 public void decode(FacesContext context) { 
214  if (context == null) { 
215   throw new NullPointerException(); 
216  } 
217 
218  // QUESTION can we move forward and support an array? no different than UISelectMany; perhaps need to know 
219  // if the value expression is single or multi-valued 
220  // ANSWER: I'd rather not right now. 
221  String paramValue = context.getExternalContext().getRequestParameterMap().get(getName()); 
222 
223  // submitted value will stay as previous value (null on initial request) if a parameter is absent 
224  if (paramValue != null) { 
225   setSubmittedValue(paramValue); 
226  } 
227 
228  rawValue = (String) getSubmittedValue(); 
229  setValid(true); 
230 
231 } 

여러 값을 가진 단일 매개 변수에 가장 좋은 방법은 @ManagedProperty을 사용하는 것입니다

@ManagedProperty("#{paramValues.car}") 
private String[] cars; 

또는 @PostConstruct 안에 ExternalContext에서 수동으로 수집 할 수도 있습니다.

새로운 <f:viewParams> 태그에 대한 기능/개선 요청을 게시 할 수 있습니다.

+0

감사합니다. BalusC! "나는 지금 당장은 아니야." 나는 일반 변환기로 조금 실험 할 것이지만, 지금은''과'String' 사이의 특정 변환기로 작업하고있다. – Antares42