2012-02-01 101 views
0

我有一個JSF1.2 selectOneMenu組件。
目前,用戶從下拉菜單中選擇一個項目,然後點擊一個輸出鏈路中一個新的瀏覽器窗口中打開一個網址:h打開網址:selectOneMenu

<h:selectOneMenu value="#{itemSelected}" valueChangeListener="#{someclass.generateInfoForURL}" onchange="submit()" > 
    <s:selectItems var="_items" value="#{itemsList}" label="#_items.itemName}" /> 
    <s:convertEntity /> 
</h:selectOneMenu> 

<h:outputLink value="URL&amp;generatedInfo=#{someclass.component.generatedInfo}" target="_blank" > 
    <f:verbatim>View Report</f:verbatim>    
</h:outputLink> 

我需要的是什麼;當用戶選擇其中一個下拉項目時,它應該在新頁面中打開URL,而不需要選擇鏈接的中間步驟。我可以在後臺bean中構建URL,但是如何獲取它以打開新的瀏覽器窗口?

回答

2

提供URL作爲項值,並使用JavaScript在新標籤頁/窗口中打開它,而不是提交表單。您只需確保所有網址都已事先準備妥當。

例如

<h:selectOneMenu onchange="window.open(value)"> 
    <f:selectItem itemLabel="Select page.." /> 
    <f:selectItem itemLabel="page1" itemValue="page1.jsf" /> 
    <f:selectItem itemLabel="page2" itemValue="page2.jsf" /> 
    <f:selectItem itemLabel="page3" itemValue="page3.jsf" /> 
    ... 
</h:selectOneMenu> 

(可以當然提供其作爲<f/s:selectItems>,上面僅僅是一個基本的例子開球)

+0

我嘗試:'的 '加載頁面,但generateInfoForURL方法在加載頁面時運行,並且從下拉列表中選擇一個項目什麼也不做。我錯過了什麼? – gebuh 2012-02-02 19:33:35

+0

你的JS語法無效。引號應該繞過JS字符串,而不是圍繞EL表達式。更容易的是讓項目價值已經返回正確的價值。 EL表達式在您更改該值時不會被重新評估。現在我看到你想要實現的更好,你可能想要在值改變監聽器方法中執行重定向。我用一個例子更新了答案。 – BalusC 2012-02-02 19:36:35

+0

thanx BalusC,工作,但不打開新頁面,它重定向當前頁面。我給它一個因爲我會在別處需要這個,如果我不能解決JS打開一個新頁面,我會將它標記爲答案。 – gebuh 2012-02-03 02:41:00