[英]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來存儲輸入值,但是我只是想知道是否可以將請求值存儲到請求參數對象中。
有一些方法:
自己從請求參數映射中獲取它。 根據標准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");
通過UIInput#getValue()
從組件自己獲取它。 JSF已經執行了以下步驟:應用請求值,轉換/驗證請求值以及更新模型值。 如果您不將輸入組件的value
屬性綁定到bean屬性,則它將粘貼在組件本身中。 您只需要訪問它。 組件通過組件樹中的客戶端ID提供。
UIInput userNameComponent = context.getViewRoot().findComponent("form:userName"); String userName = (String) userNameComponent.getValue();
將輸入組件綁定到視圖,並將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.