Потенциальные диалоги Primefaces Enter Submit Bug? - PullRequest
2 голосов
/ 08 апреля 2011

У меня точно такая же настройка диалогового окна, что и в примере с первыми лицами ниже. Когда я помещаю свой курсор в p: inputText в примере с приведенными ниже простыми словами и нажимаю клавишу ввода, окно закрывается автоматически. В моем примере я даже удалил все ссылки / кнопки и т. Д., И у меня есть форма и ввод, и он по-прежнему закрывает диалоговое окно при нажатии Enter. Есть ли способ обойти это?

http://www.primefaces.org/showcase/ui/dialogForm.jsf

mycode:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.prime.com.tr/ui"
    xmlns:dc="http://dc.dreamcatcher.com/facelet-taglib">
<ui:composition template="#{layoutBean.registeredTemplate}">
    <ui:define name="content">
        <h:form id="dreamModifyFrm">
        <p:commandLink  onclick="webSearchDlg.show();" value="open"/>
            <p:dialog header="#{bundle['dreamSearch.HEADER']}"
                      widgetVar="webSearchDlg" modal="true" styleClass="dialog dialog2"
                      draggable="false" resizable="false" showEffect="fade" position="top"
                      hideEffect="fade">
                <p:inputText id="searchText" value="#{dreamSearchBean.searchText}"/>
            </p:dialog>
        </h:form>
    </ui:define>
</ui:composition>
</html>

Ответы [ 4 ]

3 голосов
/ 09 апреля 2011

Мои проблемы были исправлены с помощью следующего: В IE есть «особенность», когда если у вас есть только один элемент ввода внутри формы, то нажатие клавиши ввода, в то время как фокус в элементе ввода приводит к отправке формы (независимо от того, есть ли у вас кнопка отправки). Одним из способов предотвратить это является добавление второго элемента ввода со значением style = "display: none;".

1 голос
/ 23 мая 2013

Позвольте мне закончить это с точки зрения 2013 года:

При использовании более новых версий PrimeFaces (3.2+?) Вы также можете использовать

<p:defaultCommand target="search-button" />

, как описано здесь:

http://blog.primefaces.org/?p=1787

Ссылка ShowCase:

http://www.primefaces.org/showcase-labs/ui/defaultCommand.jsf

Конечно, этот тег должен находиться непосредственно под тегом h: form, иначе тег isnне работает.

Если вы не используете PrimeFaces, у вас должно быть что-то вроде

<h:inputText style="display: none;" />

в форме, как описано в предыдущем ответе c12.

Оба извышеуказанное приведет к тому, что браузеры IE будут вести себя как FF, Chrome и т. д. Если IE вообще не используется, достаточно решения BalusC.

1 голос
/ 08 апреля 2011

Добавьте следующий onkeyup атрибут с небольшим JavaScript к элементу <h:form> или <h:inputText>, чтобы предотвратить действие по умолчанию при вводе.

onkeyup="return event.keyCode != 13"

Клавиша ввода имеет код клавиши 13, поэтому приведенное выше вернет false при ее нажатии, и поэтому действие элемента по умолчанию будет заблокировано.

0 голосов
/ 19 ноября 2012

У меня такая же проблема. У меня есть From с несколькими десятками InputTexts и несколькими кнопками. Когда я нажал «enter» во входном тексте, сработала первая кнопка, а НЕ кнопка «Отправить».

Подсказки выше (onkeyup="return event.keyCode != 13" и p:commandButton с display:none) у меня не сработали.

Мое решение было довольно простым и работает. Просто позвольте вашей кнопке Submit быть первой кнопкой в ​​вашем HTML-коде. Правильное расположение / расположение кнопки может быть сделано через CSS, т.е. "float: left;"

Пример:

<p:commandButton value="Save" ajax="true"   
    icon="ui-icon-disk" 
    update="myTable"
    actionListener="#{myTableBean.save()}" />

<p:commandButton id="previousPeriod" update="myTable"
    icon="ui-icon-triangle-1-w" ajax="true" type="push"
    style="float: left;"
    actionListener="#{myTableBean.scrollPrevious}"
    value="Previous" />

После установки кнопки «Сохранить» перед кнопкой «Предыдущий» все работало нормально! После нажатия «enter» внутри inputText форма теперь отправляется, и "float:left" помещает кнопку «Prev» перед кнопкой «Save» в визуальном макете.

...