Подтвердить что ты не робот

Откройте новое окно с помощью POST с помощью h: commandButton

Мне нужно открыть страницу JSF в новом окне POST при щелчке <h:commandButton>. Я знаю, что могу добиться этого, используя JavaScript. Но я хотел бы добиться этого, используя JSF, а не JavaScript.

Как я могу это достичь? Я использую JSF 2.0.

4b9b3361

Ответ 1

Единственным способом, отличным от JS, является установка target="_blank" в родительском <h:form>.

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

Это, однако, влияет на все действия, отличные от ajax (!), которые выполняются в той же форме. Поэтому, если вы умны, сделайте действие, которое не должно открывать в новом окне действие ajax. Тем не менее, ajax также является JavaScript, и вы упомянули, что не хотите использовать JS (надеюсь, вы не будете потрясены, если обнаружите, что PrimeFaces на самом деле заполнен JavaScript).

Если вам абсолютно необходимо ограничить его одним действием, вы действительно не сможете обойтись без помощи JavaScript.

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

Ответ 2

Когда вы ограничиваете цель только одним действием, возможно, вы хотите получить форму в ее исходном состоянии. С помощью действия oncklick вы устанавливаете цель формы на страницу _blan. После щелчка страница открывается на новой вкладке/странице (вызывает событие действия). Наконец, действие onblur запускается и снова устанавливает форму в исходное состояние (остальные кнопки откроются на странице _self) С помощью этого кода вы можете ограничить только команду h: commandbutton для открытия на новой странице. Остальные кнопки будут открываться на собственной странице:

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