2012-07-23 32 views
10

Tôi cần mở trang JSF trong cửa sổ mới bằng POST khi nhấp vào số <h:commandButton>. Tôi biết tôi có thể đạt được điều này bằng cách sử dụng JavaScript. Nhưng tôi muốn đạt được điều này bằng cách sử dụng JSF chứ không phải JavaScript.Mở cửa sổ mới bằng POST bằng cách sử dụng h: commandButton

Tôi làm cách nào để đạt được điều này? Tôi đang sử dụng JSF 2.0.

+0

phải là cửa sổ? hoặc nó có thể là một tab mới? – Damian

+0

Tab mới cũng tốt. Khi bạn bấm vào nút lệnh Tôi muốn một trang được mở trong một tab mới. – vr3w3c9

+0

trong một commandLink, bạn đạt được điều này thêm mục tiêu = "_ trống", nhưng tôi nghĩ rằng không có cách nào để làm điều này trong một commandButton mà không javascript – Damian

Trả lời

28

Cách không phải JS duy nhất là đặt target="_blank" trong phụ huynh <h:form>.

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

Tuy nhiên điều này ảnh hưởng đến tất cả hành động phi ajax (!) Được thực hiện theo hình thức rất giống nhau. Vì vậy, nếu bạn thông minh, hãy thực hiện hành động không nên mở trong cửa sổ mới là hành động ajax. Tuy nhiên, ajax cũng là JavaScript và bạn đã đề cập rằng bạn không muốn sử dụng JS (tôi hy vọng bạn không bị sốc khi bạn phát hiện ra rằng PrimeFaces thực sự đầy JavaScript).

Nếu bạn hoàn toàn cần hạn chế nó cho một hành động, thì bạn thực sự không thể đi xung quanh yêu cầu trợ giúp nhỏ cho JavaScript.

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

Cảm ơn rất nhiều BalusC. Nó hoạt động :) – vr3w3c9

+0

Bạn được chào đón. – BalusC

3

Khi bạn giới hạn mục tiêu chỉ với một hành động, có thể bạn muốn nhận biểu mẫu ở trạng thái ban đầu. Với hành động oncklick bạn đặt mục tiêu của biểu mẫu thành trang _blan. Sau khi nhấp chuột, trang được mở trong một tab/trang mới (kích hoạt sự kiện hành động). Cuối cùng, hành động onblur được kích hoạt và đặt biểu mẫu trở lại trạng thái ban đầu (phần còn lại của các nút sẽ mở trong trang _self) Với mã này, bạn có thể giới hạn chỉ với ah: nút lệnh để mở trong một trang mới . Các nút còn lại sẽ được mở trong trang tự:

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

Từ câu hỏi: * "Tôi biết tôi có thể đạt được điều này bằng cách sử dụng javascript. Nhưng tôi muốn đạt được điều này bằng cách sử dụng mã JSF chứ không phải Javascript." * – BalusC

Các vấn đề liên quan