簡體   English   中英

JSF將動態UI數據傳遞到服務器

[英]JSF Passing dynamic UI data to server

我在下面的代碼:

<h:inputText id="userName" />
...
<h:commandButton actionListener="..." action="...">
<f:param name="userInput" value="user" />
</h:commandButton>

基本上,我想獲取inputText(由客戶端提交)的值並將其存儲到<f:param>標記的屬性value 我想這樣做,這樣我就可以從請求參數中訪問用戶名。 有沒有辦法做到這一點? 我知道我可以使用bean來存儲輸入值,但是我只是想知道是否可以將請求值存儲到請求參數對象中。

有一些方法:

  1. 自己從請求參數映射中獲取它。 根據標准HTML規范,HTML輸入元素的name屬性表示HTTP請求參數名稱。 在JSF中,HTML輸入元素的名稱與組件的客戶機ID相同。

    因此,給定一個

     <h:form id="form"> <h:inputText id="userName" ... /> 

    生成<input name="form:userName"> ,您可以按以下方式獲取提交的值

     String userName = context.getExternalContext().getRequestParameterMap().get("form:userName"); 

  2. 通過UIInput#getValue()從組件自己獲取它。 JSF已經執行了以下步驟:應用請求值,轉換/驗證請求值以及更新模型值。 如果您不將輸入組件的value屬性綁定到bean屬性,則它將粘貼在組件本身中。 您只需要訪問它。 組件通過組件樹中的客戶端ID提供。

     UIInput userNameComponent = context.getViewRoot().findComponent("form:userName"); String userName = (String) userNameComponent.getValue(); 

  3. 將輸入組件綁定到視圖,並將UIInput#getValue()作為操作方法參數傳遞。

     <h:inputText binding="#{userName}" ... /> <h:commandButton ... action="#{bean.submit(userName.value)}" /> 

     public void submit(String userName) { // ... } 

不用說,將輸入值綁定到Bean會更清潔。

您不需要f:param 您可以像這樣訪問提交的文本:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("generatedParameter");

在您的情況下,生成的參數名稱實際上並不像userName那樣簡單,因為JSF預先填充了組件命名容器的ID。 最簡單的方法是檢查生成的HTML代碼,並查看輸入組件的名稱是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM