2013-01-17 21 views
0

我有下面這段代碼:JSF傳遞動態UI數據到服務器

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

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

回答

1

有一些方法:

  1. 從請求參數得到它映射你自己。按照標準HTML規範,HTML input元素的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是乾淨多了。

0

你不需要f:param。您可以訪問submited文字是這樣的:

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

生成的參數名稱是不是真的爲你的情況userName那樣簡單,因爲JSF prepand ID您的組件的命名容器中。最簡單的方法是檢查生成的HTML代碼並查看輸入組件的名稱。

+0

每個用戶都會有所不同嗎?前綴ID可以更改嗎? –

+1

'getRequestMap()'不返回請求參數。它返回請求屬性。 – BalusC

+0

是的,這是我的錯誤。我編輯了答案。 – partlov

相關問題