2011-10-31 36 views
5

Tôi có một ứng dụng JSF2 sử dụng Spring 3.0. Tôi có một bean mà có một loại tài sản của List<Double> với 5 yếu tố:Đầu vào JSF không thành công Lỗi chuyển đổi kép

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; 
    } 
} 

Trong file xhtml của tôi, tôi có điều này cho tất cả các yếu tố:

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

Mục đích của tôi là để lấy các giá trị như ArrayList. Ngoài ra, tôi không muốn giữ tài sản cá nhân cho mỗi thành viên. Yêu cầu trong tương lai sẽ làm cho tổng số của giá trị là động (không phải mã hóa cứng 5), vì vậy tôi có thể sử dụng vòng lặp để xác định các yếu tố đầu vào cho mỗi phần tử, nhưng bây giờ không tập trung vào điều này.

Vì vậy, đây là vấn đề. Khi tôi gửi trang, chuyển đổi không chính xác. Ví dụ, nếu đầu vào của tôi là 1, 2.0, 3 (và 2 đầu vào trống cho hai phần tử cuối cùng, chúng không bắt buộc), tôi nhận được mảng sau [1, "2.0", 3, "", ""] , trong đó 1 và 3 thuộc loại BigDecimal và 2.0 và 2 thành viên cuối cùng là các chuỗi rỗng. Điều này gây ra ClassCastexception mỗi lần tôi cố gắng để có được một thành viên của danh sách mảng, bởi vì theo định nghĩa là chung chung và loại chung là Double. BigDecimal không thể truyền tới Double; rõ ràng là các nỗ lực bỏ chuỗi cũng sẽ thất bại. Bây giờ, tôi đã mong đợi ít nhất tất cả các thành viên được chuyển đổi bởi công cụ chuyển đổi và có cùng loại. Ngoài ra, tôi cần một cách để có được một cách chính xác là Double. Tôi cũng thử như sau:

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

nhưng nó gây ra một ngoại lệ:

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

Tôi phải thừa nhận tôi mới cho công nghệ JSF, nhưng như xa như this bài viết có liên quan, đã có không cần phải ghi đè lên bất cứ điều gì. Mọi trợ giúp sẽ được đánh giá cao

Trả lời

13

<f:converter> không có thuộc tính id, thay vào đó là converterId. Xem thêm tag documentation. Vì vậy, điều này sẽ làm:

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

hoặc thậm chí

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

vâng, thực sự với 'convertedId' tôi nhận nó làm việc. Thật không may tôi đã bị lừa bởi url tôi đã cung cấp ở trên. Cảm ơn vì sớm phản hồi. –

Các vấn đề liên quan