6

アプリケーションの奇妙な動作に遭遇しました。コマンド ボタンは、2 回目のヒットでアクションを呼び出し始めます。最初に - 何も起こりません。これは Firefox と Chromium で有効になりますが、エピファニーでは通常どおり動作します。

私の環境:-ubuntu 11.04-glassfish 3.1.1-jsf 2.X-primefaces 3.2-firefox 12.0-エピファニー2.30.6

コード例:

    <ui:define name="content">
       <h:form id="form">
            <h:panelGrid id="panelGrid" columns="3">

                <h:outputText value="#{msg.fieUserName}:"/>
                <h:inputText  id="name"  value="#{userBb.editedUser.username}" />
                <h:message    for="name" styleClass="error_msg"/>

                <h:outputText value="#{msg.fieUserDescription}:"/>
                <h:inputText  id="description"  value="#{userBb.editedUser.description}" />
                <h:message    for="description" styleClass="error_msg"/>

                <h:outputText   value="#{msg.fieUserPassword}:"/>
                <h:inputSecret  id="password" value="#{userBb.editedUser.password}" redisplay="true"/>
                <h:message      for="password" styleClass="error_msg"/>

                <h:outputText value="#{msg.fieUserRights}:"/>
                <p:selectOneMenu id=       "rights"
                                 value=    "#{userBb.editedUserGroup}"
                                 converter="#{pGroupOfUsersConverter}">
                    <f:selectItems
                        value    ="#{groupDao.findAll()}"
                        var      ="row"
                        itemLabel="#{groupDao.rightsDescription(row.id)}"
                        itemValue="#{row.groupname}" 
                        >
                    </f:selectItems>
                </p:selectOneMenu>
                <h:message for="rights" styleClass="error_msg"/>

                <h:outputText value="#{msg.fiePorofolioName}:" rendered="#{userBb.chosenNew}"/>
                <h:inputText  id="portName" value="#{userBb.portfelForNewUser.nazwa}" rendered="#{userBb.chosenNew}">
                    <f:validateBean disabled="true" />
                </h:inputText>
                <h:message for="portName" styleClass="error_msg" rendered="#{userBb.chosenNew}"/>

                <h:outputText    value="#{msg.fiePotofolioCurrency}:" rendered="#{userBb.chosenNew}"/>
                <p:selectOneMenu id=       "waldep" 
                                 value=    "#{userBb.portfelForNewUser.walutaDepozytowa}"
                                 converter="#{igConverter}"
                                 rendered= "#{userBb.chosenNew}"
                                 >
                   <f:selectItems value=    "#{igDao.waluty}" 
                                  var=      "row"
                                  itemLabel="#{row.nazwa}"/>
                </p:selectOneMenu>
                <h:message for="waldep" styleClass="error_msg" rendered="#{userBb.chosenNew}"/>

            </h:panelGrid>
            <h:panelGrid columns="2">
               <h:commandButton value="#{msg.butCreate}" action="#{userBb.formCreate()}" rendered="#{userBb.chosenNew}" />
               <h:commandButton value="#{msg.butSave}"   action="#{userBb.formEdit()}"   rendered="#{!userBb.chosenNew}"/>
               <h:commandButton value="#{msg.butBack}"   action="#{userBb.formBack()}"/>
            </h:panelGrid>
        </h:form>
    </ui:define>

この例では、メソッド userBb.formCreate() は、コマンド ボタンが表示されているにもかかわらず、コマンド ボタンを 2 回クリックしたときにのみ呼び出されます。フィールドが適切に入力されていない場合、適切なメッセージがフィールドの横に表示されますが、2 回目のクリックでのみ表示されます。何かアドバイス?

私はからポイントをチェックアウトします:このアドバイス、しかし解決策が見つかりませんでした。

4

1 に答える 1

7

わかりました、私は何が間違っているかを見つけました。そう:

問題の外観: ユーザー データのページがあります。一部の入力項目とコマンド ボタン。「作成」ボタンをクリックすると、入力データがチェックアウトされます。データに問題がない場合、ユーザーが作成され、ユーザーのテーブルが表示されます。エラーがある場合は、エラー メッセージが表示され、ユーザーは同じページにとどまります。 ここに画像の説明を入力

いくつかの異常な動作を見つけました。最初のクリック (アクション) では何も起こらず、2 回目以降のアクションのみが効果を発揮します。しかし。この動作は、私が使用している Web ブラウザーの種類に関連していました。

すべてのアクションは、最初のクリックから Web ブラウザーで行われます: epiphany と konqueror。Firefox と Chromium では、上記で説明したこの不規則な動作を観察しました。コマンド ボタンのコードは次のとおりです。

<h:commandButton value="#{msg.butCreate}" action="#{userBb.formCreate()}" rendered="#{userBb.chosenNew}"/>

さまざまな Web ブラウザーでのさまざまな動作。

原因。 原因は、@Balusc によって彼のメモに列挙されていました。さすがにptでした。7。

ソリューション。 この方法でボタン宣言を変更しようとしました:

<h:commandButton value="#{msg.butCreate}" action="#{userBb.formCreate()}" rendered="#{userBb.chosenNew}">
   <f:ajax render="userForm"/>
</h:commandButton> 

ここで、userForm は h:form の適切な ID でした。結果はありません。2 回目以降のクリックのみが有効です - エラー メッセージが表示されます。

そのため、前のページから宣言コマンド ボタンを変更しました。これにより、不安定な動作ページが呼び出されました。もともとは次のとおりでした。

<p:commandButton value="#{msg.butNew}"    action="#{userBb.actionNew()}"/>

Primefaces コマンド ボタン。Balusc が書いたように、それはそれでし

そこで、宣言を次のように変更しました。

<p:commandButton value="#{msg.butNew}"    action="#{userBb.actionNew()}" ajax="false"/>

以上です。最初のアクションでは、どのブラウザでも問題なく動作します。

于 2012-05-19T12:36:33.287 に答える