2013-04-09 96 views
10

我需要呈現h:inputText如下HTML輸出:如何在h:inputText中指定name屬性?

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

h:inputText呈現屬性的名稱相同組件的客戶端ID。我想自己指定name屬性,而不是將客戶端ID添加到該屬性中,以便輸入字段可以顯示其他網站上相同字段類型的以前提交的值的有意義的自動填充建議。對於例如當我使用name="email"以及電子郵件輸入字段時,會向用戶顯示以前在其他網站上提交的電子郵件ID的建議。

+0

的http://計算器。com/questions/6859520 /添加自定義屬性html5-support-to-jsf-2-0-uiinput-component – Daniel 2013-04-09 06:48:59

回答

14

你不能使用<h:inputText>來實現它。它的名字由JSF根據客戶端ID(反過來基於組件ID及其所有命名容器父母)自動生成。

您已經基本上2個選項反正來實現具體功能要求:

  1. 如果沒有其他的命名容器家長,指導家長形式不是前面加上其ID:

    <h:form prependId="false"> 
    

    但這會導致<f:ajax>失敗。

  2. 使用普通HTML元素,而不是JSF組件:

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

    您只需通過@ManagedProperty自己收集他們的請求範圍的bean:

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

    你會錯過JSF內置驗證/轉換設施和ajax魔術。

但是有一個完全不同的選擇:使用HTML5 <input type="email">。這樣瀏覽器就會自動建立以前輸入的所有類型相同的電子郵件。這不是由<h:inputText>本機支持的。但是,您可以使用自定義渲染套件得到它的工作,如Adding custom attribute (HTML5) support to Primefaces (3.4)回答:

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

更新作爲JSF 2.2,你可以很容易地終於宣佈passthrough attributes,而無需自定義渲染套件。

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

另一個經典作品 – 2014-12-23 19:03:01

+0

@BalusC爲什麼添加'prependId =「false」'會導致''失敗? – Tarik 2015-02-17 17:54:32

+3

@Tarik:找不到要執行的組件。請不要使用'prependId =「false」'。他們不應該在JSF 1.2中添加它。 – BalusC 2015-02-17 17:56:56

-1

你可以在不指定name屬性的情況下做你想做的事。 id屬性就夠了。請嘗試以下按爲例:

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

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

代替

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

希望這是你在找什麼:)

+1

這是**沒有**沒有在頁面中設置任何其他屬性工作,這些屬性**不應使用**。請參閱接受答案中的第1點。提高這個人的人也應該閱讀接受的答案... – Kukeltje 2018-01-05 10:23:23

+0

也許我沒有在一開始就接受它(認爲這是一個js電話)。但是如果我現在就可以使用屬性文件來使用以下語法調用它們:value =「#{prefix.properties}」 – Henz 2018-01-10 00:09:52