潜在的Primefaces对话框输入提交错误?

时间:2011-04-08 02:34:37

标签: jsf-2 primefaces

我有与下面的primefaces示例完全相同的对话框格式设置。当我将光标放在下面的primefaces示例中的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 个答案:

答案 0 :(得分:3)

我的问题使用以下方法修复: IE中有一个“功能”,如果你在表单中只有一个输入元素,那么在输入元素中聚焦时按Enter键会导致表单提交(无论你是否有提交按钮)。防止这种情况的一种方法是添加第二个输入元素,其中style =“display:none;”。

答案 1 :(得分:1)

使用一点JavaScript将以下onkeyup attrubute添加到<h:form><h:inputText>元素,以防止在输入时按默认操作。

onkeyup="return event.keyCode != 13"

回车键的密钥代码为13,因此当按下时,上面的代码将返回false,因此元素的默认操作将被阻止。

答案 2 :(得分:1)

让我从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标记下方,否则标记无效。

不使用PrimeFaces时,您必须拥有类似

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

在表单上,​​如前面的回答c12所述。

上述两种情况都会导致 IE浏览器表现得像FF,Chrome等。完全不使用IE时,BalusC的解决方案就足够了。

答案 3 :(得分:-1)

我遇到了同样的问题。我有一个带有几十个InputTexts和几个按钮的From。当我在inputText中按下'enter'时,第一个按钮被触发而不是提交按钮。

上面的提示(onkeyup="return event.keyCode != 13"p:commandButtondisplay:none)对我不起作用。

我的解决方案非常简单且有效。只需让您的提交按钮成为HTML代码中的第一个按钮即可。 Button的正确布局/排列可以通过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" />

将我的Save-Button放在我的“Previous”-Button之后,一切正常!在inputText中按“enter”后,表单立即被提交,"float:left"将Prev-Button放在可视化布局中的Save-Button之前。