2010-04-01 35 views

回答

0
String queryString = ((HttpServletRequest) FacesContext.getCurrentContext() 
     .getExternalContext().getRequest()).getQueryString(); 

在操作方法或者在你需要它的相聽衆將這個通過託管bean讀取查詢字符串值。不要把它放在構造函數中。

+0

感謝您的回覆 – johnbritto 2010-04-01 09:28:03

+0

我試過了這不是寫作 – johnbritto 2010-04-01 09:33:23

+1

@johnbritto _how_它不工作?詳細信息 – Bozho 2010-04-01 09:34:16

2

我不確定Bozho的答案如何不適合你,但不管如何,我建議讓JSF做所有的工作,而不是從JSF引擎蓋下的「原始」HttpServletRequest豆。利用JSF管理的物業設施。

首先,向bean添加兩個屬性:confirmuseremailid,當然還有getter和setter。然後,將它們定義爲faces-config.xml中的託管屬性,其中它們將被填充#{param.confirmuser}#{param.emailid}。您可能已經知道,#{param}指向請求參數映射。

E.g.

<managed-bean> 
    <managed-bean-name>userManager</managed-bean-name> 
    <managed-bean-class>com.example.UserManager</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>confirmuser</property-name> 
     <value>#{param.confirmuser}</value> 
    </managed-property> 
    <managed-property> 
     <property-name>emailid</property-name> 
     <value>#{param.emailid}</value> 
    </managed-property> 
</managed-bean> 

這樣JSF會自動設置這些值的bean屬性。

+0

Iam使用Jsf1.1。 Jsf 1.1不支持#{param} El.I想要在jsf1.1中修復此問題 – johnbritto 2010-04-01 11:35:55

+0

它在JSF 1.1中受支持。更重要的是,這與JSF無關。如果它不能解決你的問題,那麼問題的原因就在於別的地方。這可能是因爲你沒有從getQueryString()中得到任何東西。請求鏈中是否有一些奇怪的過濾器或servlet在轉發之前操縱URL? – BalusC 2010-04-01 14:37:22

+0

這個例子很好,我犯了錯誤。 感謝Baulc – johnbritto 2010-04-08 05:48:22

0

您可以通過將查詢字符串參數作爲<f:param />值傳遞給您的命令按鈕來完成此操作。

例如,給定以下URL(即,用戶在電子郵件點擊此,因此,沒有支持bean代碼是否已經被執行):

http://localhost:8080/webapp/resetPassword.xhtml?uuid=3d7844ba-5f4b-4de0-9595-fdcbdedad4dc&code=a2JITmEyamJhQ29HTVhyaHhhNnRqdXI3T1kyMldydU4= 

你的JSF代碼

<h:commandButton action="#{resetPasswordController.doActualReset}" value="Submit"> 
    <f:param name="code" 
     value="#{param.code}" /> 
    <f:param name="uuid" 
     value="#{param.uuid}" /> 
</h:commandButton> 

BackingBean

public String doActualReset() { 

    FacesContext context = FacesContext.getCurrentInstance(); 
    Map<String, String> requestMap = context.getExternalContext().getRequestParameterMap(); 
    String code = (String) requestMap.get("code"); 
    String uuid = (String) requestMap.get("uuid"); 
    ... 
} 

警告:這是在JSF 2中測試的,但應該在1.1中工作。這裏沒有什麼是2.x特有的。

+1

'#{facesContext.externalContext.requestParameterMap.get('code')}'很笨拙。只需使用'#{param.code}'。此外,JSF1的EL範圍中沒有'#{facesContext}'。 – BalusC 2012-05-11 04:33:21

+0

好點BalusC。我已根據您的評論更新了樣本。謝謝。 – 2012-05-15 16:40:53