2011-04-08 25 views
2

我具有與下面的primefaces示例完全相同的對話框窗體設置。當我將鼠標放在下面的primefaces示例中的p:inputText上時,按下回車鍵,窗口自動關閉。在我的例子中,我甚至刪除了所有的鏈接/按鈕等,只是有一個窗體和一個輸入,它仍然關閉對話框時,輸入。任何方式在這個?潛在Primefaces對話框輸入提交錯誤?

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> 

回答

1

添加以下onkeyup attrubute有一些JavaScript到<h:form><h:inputText>元素,以防止對進入按默認操作。

onkeyup="return event.keyCode != 13" 

的回車鍵爲13鍵碼,所以當按下等元素的默認動作將被阻止它上面將返回false

+0

謝謝BalusC!我相信如果我這樣做,那麼我將無法擊中輸入實際提交所需按鈕的形式。當我使用此代碼時,我無法按默認提交按鈕進入。有沒有辦法將這兩種方法結合起來?基本上,只需讓一個按鈕可用於輸入按鍵,表格上沒有任何其他內容? – c12 2011-04-08 12:00:25

+0

然後就是不要使用它。而是將按鈕設置爲HTML DOM樹中的第一個下一個按鈕元素,而不是輸入元素。 – BalusC 2011-04-08 12:03:52

+0

所以只需在表單中首先列出提交按鈕並使用css將它放置在頁面的底部?那就是我們需要用戶按鈕的地方 – c12 2011-04-08 19:00:40

3

我的問題已經修復使用以下: 在IE中有一個「功能」,如果你只有一個表單內的輸入元素,然後按Enter鍵,而輸入元素中的焦點導致表單提交(無論你是否有提交按鈕)。防止這種情況的一種方法是添加style =「display:none;」的第二個輸入元素。

+0

偉大的工作。通過添加 Melloware 2012-11-21 19:15:02

-1

我得到了同樣的問題。我有一個從幾十個InputTexts和幾個按鈕。當我在輸入文本中按'enter'時,第一個按鈕被觸發,而不是提交按鈕。

上面的提示(和p:commandButtondisplay:none)不適用於我。

我的解決方案非常簡單並且可行。只要讓你的提交按鈕成爲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" /> 

把我保存鍵式之前我的「上一頁」 - 鍵後,一切正常!在inputText中按下「enter」後,表單現在被提交,並且"float:left"將Prev-Button放置在可視化佈局中的Save-Button之前。

+1

這不是ap:commandbutton wiht您無需添加如下輸入字段: Melloware 2012-11-21 19:15:49

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的解決方案就足夠了。