2012-07-23 8 views
10

Muszę otworzyć stronę JSF w nowym oknie przez POST po kliknięciu na <h:commandButton>. Wiem, że mogę to osiągnąć za pomocą JavaScript. Ale chciałbym to osiągnąć przy użyciu JSF, a nie JavaScript.Otwórz nowe okno według POST, używając h: commandButton

Jak mogę to osiągnąć? Używam JSF 2.0.

+0

musi być oknem? czy może to być nowa zakładka? – Damian

+0

Nowa zakładka również jest w porządku. Po kliknięciu polecenia Przycisk Chcę otworzyć stronę w nowej karcie. – vr3w3c9

+0

w commandLink, osiągasz to dodanie target = "_ blank", ale myślę, że nie ma sposobu, aby to zrobić w commandButton bez javascript – Damian

Odpowiedz

28

Jedyny sposób poza JS to ustawienie target="_blank" w rodzicu <h:form>.

<h:form target="_blank"> 
    ... 
    <h:commandButton value="Open in new Window" /> 
</h:form> 

to jednak wpływa wszystkie non-ajax działania, które są wykonywane w tej samej formie (!). Więc jeśli jesteś sprytny, uczyń akcję, która nie powinna otwierać w nowym oknie akcji ajaxowej. Jednak ajax to także JavaScript i wspomniałeś, że nie chcesz używać JS (mam nadzieję, że nie zszokuje Cię, gdy odkryjesz, że PrimeFaces jest w rzeczywistości pełen JavaScript).

Jeśli absolutnie potrzebujesz ograniczyć to do pojedynczej akcji, to naprawdę nie możesz obejść się, prosząc niewielką pomoc do JavaScript.

<h:form> 
    ... 
    <h:commandButton value="Open in new Window" onclick="this.form.target='_blank'" /> 
</h:form> 
+0

Wielkie dzięki BalusC. Zadziałało :) – vr3w3c9

+0

Nie ma za co. – BalusC

3

Po ograniczeniu celu tylko do pojedynczej akcji, może chcesz uzyskać formularz w stanie początkowym. Za pomocą akcji oncklick ustawiasz cel formularza na stronę _blan. Po kliknięciu strona jest otwierana w nowej karcie/stronie (uruchamia zdarzenie akcji). Wreszcie, akcja onblur zostaje uruchomiona i ustawia formularz ponownie do stanu początkowego (pozostałe przyciski otwierają się na stronie _self) Za pomocą tego kodu można ograniczyć się do przycisku ah: command, aby otworzyć na nowej stronie . Pozostała część przycisków zostanie otwarta na stronie własnej:

<h:commandButton 
     onclick="this.form.target='_blank'" 
     onblur="this.form.target='_self'" 
     id="listadoRebuts" 
     action="#{giaquaBusquedaCorte.abrirListadoRebuts}" 
     value="#{msg.seqVisorbtnRecibos}"> 
    </h:commandButton> 
+0

Od pytania: * "Wiem, że mogę to osiągnąć za pomocą javascript, ale chciałbym to osiągnąć za pomocą kodu JSF, a nie JavaScript." * – BalusC

Powiązane problemy