2013-04-09 37 views
10

tôi cần phải làm như sau h:inputText sản lượng html:Cách chỉ định thuộc tính name trong h: inputText?

<input id="yourName" type="text" name="name" /> 
    <input id="email" type="text" name="email" /> 

Nhưng h:inputText làm cho tên thuộc tính giống như id khách hàng của các thành phần. Tôi muốn tự mình chỉ định thuộc tính name, thay vì đặt id ứng dụng vào đó, để trường nhập có thể hiển thị các đề xuất tự động hoàn thành có ý nghĩa từ các giá trị đã gửi trước đó cho cùng một loại trường trên các trang web khác. Ví dụ: khi tôi sử dụng name="email" với trường nhập cho email, người dùng được hiển thị đề xuất id email mà anh đã gửi trước đây trên các trang web khác.

+0

http: // stackoverflow.com/questions/6859520/add-custom-attribute-html5-support-to-jsf-2-0-uiinput-component – Daniel

Trả lời

14

Bạn không thể đạt được nó bằng cách sử dụng <h:inputText>. Tên của nó được tự động phát sinh bởi JSF dựa trên ID khách hàng (lần lượt dựa trên ID thành phần và tất cả các phụ huynh chứa tên của nó).

Bạn đã cơ bản 2 lựa chọn để đạt được các yêu cầu chức năng cụ thể nào:

  1. Nếu không có tên cha mẹ container khác, hướng dẫn form cha để không thêm vào trước ID của nó:

    <h:form prependId="false"> 
    

    Tuy nhiên, điều này sẽ gây ra <f:ajax> để không thành công.

  2. Sử dụng các phần tử HTML đơn giản thay vì các thành phần JSF:

    <input name="name" value="#{bean.name}" /> 
    <input name="email" value="#{bean.email}" /> 
    

    Bạn chỉ phải thu thập chúng mình qua @ManagedProperty trên yêu cầu scoped đậu:

    @ManagedProperty("#{param.name}") 
    private String name; 
    
    @ManagedProperty("#{param.email}") 
    private String email; 
    

    Và bạn sẽ bỏ lỡ JSF BUILTIN cơ sở xác nhận/chuyển đổi và phép thuật ajax.

Tuy nhiên, thay thế hoàn toàn khác: sử dụng HTML5 <input type="email">. Bằng cách này, trình duyệt sẽ tự động đề xuất tất cả các email đã nhập trước đó trên các đầu vào có cùng loại. Điều này không được hỗ trợ bởi <h:inputText>. tuy nhiên bạn có thể sử dụng một tùy chỉnh làm bộ để có được nó để làm việc, như đã trả lời trong Adding custom attribute (HTML5) support to Primefaces (3.4):

<h:inputText type="email" ... /> 

Cập nhật như của JSF 2.2 bạn có thể dễ dàng cuối cùng tuyên bố passthrough attributes mà không cần tùy chỉnh làm bộ.

<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough"> 
... 
<h:inputText a:type="email" ... /> 
+0

Một tác phẩm cổ điển khác –

+0

@BalusC tại sao việc thêm 'prependId =" false "' sẽ gây ra '' thất bại? – Tarik

+3

@Tarik: Không thể tìm thấy thành phần để thực thi. Chỉ cần không bao giờ sử dụng 'prependId =" false "'. Họ không bao giờ nên thêm nó vào JSF 1.2. – BalusC

-1

Bạn có thể làm những gì bạn muốn mà không chỉ định thuộc tính tên. Thuộc tính id là đủ. Hãy thử như sau theo một ví dụ:

< h:inputText id="email" ... /> 

... 
$("#email input").click(function (event) { 
... 
} 

thay vì

$("#email input[name='email']").click(function (event) 

Hy vọng điều này là những gì bạn đang tìm kiếm :)

+1

Đây là ** không ** làm việc mà không có bất kỳ thuộc tính nào khác được đặt trong trang và các thuộc tính đó ** không được sử dụng **. Xem điểm 1 trong câu trả lời được chấp nhận. Những người upvoted này cũng nên đọc câu trả lời được chấp nhận ... – Kukeltje

+0

Có lẽ tôi đã không bắt nó ở đầu (nghĩ rằng đó là một cuộc gọi js). Nhưng nếu tôi làm bây giờ anh ta có thể sử dụng một tệp thuộc tính để gọi những người có cú pháp sau: value = "# {prefix.properties}" – Henz

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