2011-10-31 10 views
5

Mam aplikację JSF2, która korzysta ze Spring 3.0. Mam fasoli, która ma właściwość typu List<Double> z 5 elementów:Błąd wejściowy JSF do podwójnej konwersji

public class MyBean { 
    private List<Double> values; 
    public List<Double> getValues() { 
     if (values == null) { 
      values = new ArrayList<Double>(5); 
       for (int i = 0; i < 5; i++) { 
        values.add(null); 
       } 
     } 
     return values; 
    } 
    public void setValues(List<Double> values) { 
     this.values = values; 
    } 
} 

W moim pliku xhtml mam to dla każdego elementu:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:convertNumber pattern="#########0.##" /> 
</h:inputText> 

Moim celem jest, aby pobrać wartości jako ArrayList. Ponadto nie chcę zachować indywidualnych właściwości dla każdego członka. Przyszłe wymaganie sprawi, że całkowita wartość tej wartości będzie dynamiczna (a nie zakodowana na sztywno 5), więc mogę użyć pętli do zdefiniowania wejść dla każdego elementu, ale nie pozwalam się teraz skupić na tym.

Więc tutaj jest problem. Kiedy przesyłam stronę, konwersja nie jest poprawna. Na przykład, jeśli moje wejście to 1, 2,0, 3 (i 2 puste wejścia dla dwóch ostatnich elementów, nie są one obowiązkowe), otrzymuję następującą tablicę [1, "2.0", 3, "", ""] , gdzie 1 i 3 są typu BigDecimal, a 2.0 i ostatnie 2 elementy są pustymi ciągami. Powoduje to, że za każdym razem, gdy próbuję uzyskać element z listy tablic, próbuję uzyskać członka listy, ponieważ z definicji jest to typowy, a typ ogólny to Double. BigDecimal nie można przesłać na numer Double; jest oczywiste, że próby odlewania ciągów również się nie powiodą. Teraz oczekiwałbym, że przynajmniej wszyscy członkowie będą konwertowani przez konwerter i będą tego samego typu. Potrzebuję też sposobu, aby uzyskać poprawne działanie jako Double. Próbowałem również następujące:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:converter id="javax.faces.Double" /> 
</h:inputText> 

ale spowodował wyjątek:

<f:converter> Default behavior invoked of requiring a converter-id passed in the constructor, must override ConvertHandler(ConverterConfig)

Muszę przyznać, że jestem nowy w technologii JSF, ale o ile this artykuł dotyczy, nie było nie trzeba niczego przesłonić. Każda pomoc zostanie doceniona:

Odpowiedz

13

Nie ma atrybutu nie ma atrybutu id, zamiast tego jest converterId. Zobacz także tag documentation. Tak, należy to zrobić:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:converter converterId="javax.faces.Double" /> 
</h:inputText> 

lub nawet

<h:inputText id="value1" value="#{myBean.values[0]}" converter="javax.faces.Double" /> 
+0

Tak, rzeczywiście z 'convertedId' mam to działa. Niestety zostałem wprowadzony w błąd przez adres URL podany powyżej. Dzięki za szybką odpowiedź. –

Powiązane problemy