2010-02-16 43 views
6

Tôi đang sử dụng JSF 1.2 với IceFaces 1.8 trong một dự án tại đây.Chuyển đổi nổi JSF

Tôi có một trang về cơ bản là một mạng chỉnh sửa lớn cho toàn bộ các trường số dấu phẩy động. Này được thực hiện với inputText lĩnh vực trên trang trỏ ở một đối tượng giá trị với nguyên thủy float loại

Bây giờ, như một yêu cầu mới thấy một số trong những lĩnh vực được nullable, tôi muốn thay đổi các đối tượng có giá trị sử dụng Float đối tượng chứ không phải là nguyên thủy loại. Tôi không nghĩ rằng tôi cần phải làm bất cứ điều gì để trang này chứa đựng.

Tuy nhiên, khi tôi thực hiện thay đổi tôi nhận được lỗi sau:

/pages/page.xhtml @79,14 value="#{row.targetValue}": java.lang.IllegalArgumentException: argument type mismatch

/pages/page.xhtml @79,14 value="#{row.targetValue}": java.lang.IllegalArgumentException: [email protected]

Trang trông như thế này:

<ice:inputText value="#{row.targetValue}" size="4"> 
    <f:convertNumber pattern="###.#" /> 
</ice:inputText> 

Tôi cũng cố gắng thêm vào <f:convert convertId="javax.faces.Float" /> trong đó là tốt nhưng điều đó dường như không hoạt động! Không thay đổi các loại đối tượng giá trị thành Double.

Tôi chắc chắn rằng tôi có thể thiếu một cái gì đó thực sự đơn giản nhưng tôi đã nhìn chằm chằm vào điều này trong một thời bây giờ và không có câu trả lời là ngay lập tức rõ ràng!

+0

Không thể tạo lại điều này với Mojarra 2.0.2 trên Tomcat 6.0.20 (không có IceFaces). Bạn có thể đăng toàn bộ stacktrace không? – BalusC

+0

@BalusC Rất tiếc, tôi không có quyền truy cập vào dấu vết ngăn xếp đầy đủ, lỗi được tạo trong JSF và tôi không có quyền truy cập vào nó. Nhưng tôi đang nghiên cứu thêm một số thông tin, hãy chịu đựng tôi trong một phút ... –

+0

Chỉ cần lấy nó từ nhật ký máy chủ? – BalusC

Trả lời

4

Sau một số điều tra (xem ví dụ: here, herehere) rằng <f:convertNumber> là sự cố. Dường như số lượng nó chuyển đổi phụ thuộc vào đầu vào bạn cho nó - nó có thể là một số nguyên hoặc một số dấu phẩy động. Nói cách khác, nó không nhìn vào kiểu đích - nó chỉ tạo ra một cá thể của java.lang.Number. Đó là hầu như không lý tưởng, mặc dù tôi không thể xác định cho dù điều này là bởi vì một nơi nào đó tôi đang sử dụng một phiên bản cũ của JSF hoặc EL hoặc một cái gì đó như thế.

Dường như có ba giải pháp:

  1. Sử dụng java.lang.Number as type đối tượng giá trị của mình;
  2. Viết trình chuyển đổi của riêng bạn;
  3. Không sử dụng <f:convertNumber>.

Thật không may # 1 không phải là một lựa chọn cho tôi vì các lý do khác và tôi không muốn viết trình chuyển đổi của riêng mình vào lúc này. Tuy nhiên nếu tôi thay đổi mã để loại bỏ các convertNumber, tất cả mọi thứ dường như làm việc OK. (Tôi cũng đã cập nhật loại đối tượng giá trị thành Double được đề xuất trong một trong các liên kết mà tôi đã xem).

Điều đó ngăn cản các ngoại lệ và có vẻ như JSF vẫn đang làm những gì tôi muốn. Chỉ cần gây phiền nhiễu rằng có vẻ như bạn không thể chỉ định convertNumber và loại chuyển đổi trong cùng một trường hợp.

+0

trình chuyển đổi số, trong myfaces ít nhất sử dụng 'DecimalFormat' để phân tích giá trị, vì vậy đó là cách lý tưởng. – Bozho

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