2011-10-14 36 views
9

Tôi đang sử dụng các liên kết tự động tạo ra:JSF chuyển đổi cho f: param

  <h:link outcome="/page" value="#{name}"> 
      <f:param name="name" value="#{name}"/> 
      </h:link> 

Tôi muốn đính kèm chuyển đổi tùy chỉnh cho f: param để loại bỏ không gian từ # {name}, vv Nhưng không có chuyển đổi bất động sản trong f: param.

Trả lời

14

Một Converter là intented để chuyển đổi từ trình giá trị tham số String yêu cầu các đối tượng phức tạp và ngược lại trong các lĩnh vực đầu vào. Tuy nhiên, <f:param> chỉ là đầu ra thuần túy và nó sẽ luôn gọi toString() trên giá trị. Nó không hỗ trợ Converter.

cược sạch nhất và tốt nhất của bạn là tạo ra một custom EL function, để cuối cùng bạn kết thúc như:

<f:param name="name" value="#{util:prettyUrl(name)}"/> 

Cập nhật: thư viện tiện ích JSF OmniFaces có kể từ khi phiên bản 1.4 (tháng 3 năm 2013) thành phần <o:param> mở rộng <f:param> với sự hỗ trợ cho trình chuyển đổi JSF đầy đủ, giống hệt như bạn sử dụng trong <h:outputText converter>.

<h:link outcome="/page" value="#{name}"> 
    <o:param name="name" value="#{name}" converter="somePrettyURLConverter" /> 
</h:link> 

Xem thêm showcase.

+1

Tôi đã có cùng một câu hỏi và tôi không thực sự hài lòng với giải pháp như vậy. Trên trang web nhận 'f: viewParam' được sử dụng để truy lục đối tượng bằng cách sử dụng trình chuyển đổi. Vì vậy, nó sẽ được thẳng về phía trước để sử dụng một công cụ chuyển đổi với 'f: param' quá. Kể từ khi logic đó đã được thực hiện trong bộ chuyển đổi. Bây giờ, logic đó cũng có mặt trong khung nhìn và nếu tôi thay đổi tham số có thể từ tên thành id, tôi phải thay đổi công cụ chuyển đổi và trang web. Hàm el tùy chỉnh sẽ là một cách giải quyết, ít nhất là nếu trình biến đổi ban đầu cũng sẽ sử dụng nó. – djmj

+2

đã thêm thẻ 'o: param' vào thư viện omnifaces của mình và nó hoạt động rất tốt. – djmj

1

nếu bạn làm điều gì đó như thế này thì sao?

<f:param name="name" value="#{name.replace(' ', '')}" /> 

Điều này có hiệu quả không?

Hoặc bạn muốn cho tất cả < f: param ... ??

Trân

+0

Thực ra, chuyển đổi phức tạp hơn, vì vậy tôi cần hàm java. Bây giờ tôi sử dụng các hàm bean được quản lý '' – mm1

+1

@ mm1: Tôi không nghĩ rằng bạn có một giải pháp khác .. Nó không không có ý nghĩa ... những gì bạn muốn là để thay thế sự trở lại của # {name} khi được truy cập bởi Alex

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