1

今、私はプライムフェイスを勉強しています.UIは素晴らしいです.それを使って自分のウェブサイトを構築したいので、今ダイアログボックスを勉強しています.プライムフェイスのリクエストコンテキストを使用してダイアログボックスを隠したり隠したりしたいこれを達成しますか?stackoverflow で同じ質問を検索したところ、いくつか見つかりましたが、うまくいきません。すべてを明確にするために、これは私の register.jsf コードです。

  <?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>Insert title here</title>
    <h:outputStylesheet library="css" name="style.css"/>
</h:head>
<h:body>
    <p:panel toggleable="true" header="Registration" closable="true" closeTitle="back" styleClass="register-panel">
        <h:form>
            <h:panelGrid columns="2">
                <h:outputLabel  value="Firstname: " />
                <p:inputText id="firstname" value="#{ register.firstName }" required="true" requiredMessage="Firstname cannot be blank">
                    <f:validateDoubleRange minimum="3" maximum="15"  />
                </p:inputText>

                <h:outputLabel value="Middlename: " />
                <p:inputText id="middlename" value="#{ register.middleName }" required="true" requiredMessage="Middlename cannot be blank">
                    <f:validateDoubleRange minimum="3" maximum="15"  />
                </p:inputText>

                <h:outputLabel value="Lastname: " />
                <p:inputText id="lastname" value="#{ register.lastName }" required="true" requiredMessage="Lastname cannot be blank">
                    <f:validateDoubleRange minimum="3" maximum="15"  />
                </p:inputText>

                <p:commandButton type="button" update="errorFirst, errorMiddle, errorLast, ErrorD, confirmD" value="Register" actionListener="#{ register.Register }" />

                <p:dialog width="350"  modal="true" id="ErrorD" header="Error Registration" visible="true" maximizable="false"  widgetVar="showErrorDialog">
                <h:panelGrid columns="1">
                    <p:message for="firstname" id="errorFirst" />
                    <p:message for="middlename" id="errorMiddle" />
                    <p:message for="lastname" id="errorLast" />
                </h:panelGrid>
                </p:dialog>

                <p:dialog width="350" modal="true" id="confirmD" header="Confirm Registration"  visible="true" maximizable="false"  widgetVar="showConfirmDialog">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Are you sure you want to save the records" />
                        <h:outputLabel value=""/>
                        <p:separator />
                        <p:separator />

                        <p:commandButton value="Ok, Sure" />
                        <p:commandButton value="Cancel" />
                    </h:panelGrid>

                </p:dialog>

            </h:panelGrid>

        </h:form>
    </p:panel>
</h:body>
</html>

これは私のレジスタビーンです:

    package org.register;

import javax.annotation.PostConstruct;
import javax.faces.bean.*;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;

@ManagedBean(name="register")
@RequestScoped
public class registerBean {

    private String firstName;
    private String middleName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getMiddleName() {
        return middleName;
    }
    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void Register(ActionEvent e){
        RequestContext primeContext = RequestContext.getCurrentInstance();
        if(getFirstName().equals("") || getMiddleName().equals("") || getLastName().equals("")){
            primeContext.execute("showErrorDialog.show()");
        }
        else{
            primeContext.execute("showConfirmDialog.show()");
        }

    }


}

コードにエラーはありませんが、ページが読み込まれるたびに問題が発生し、すでに2つのダイアログが呼び出されます。登録が失敗した場合は最初のダイアログを開き、成功した場合は2番目のダイアログを開きます。みんなありがとう。

4

1 に答える 1

0

基本的に、Ajax リクエストを使用するために、コードはtype="button"Registerを削除することで機能するはずです。commandButtonメソッド #{register.Register} は呼び出されませんでした。visible="true"また、両方のダイアログでを削除します

補足として、バッキング メソッドを実行するために、JSF は検証ルールを実行するためconfirmD、フォーム内のすべてのデータがそのような検証を満たしている場合にのみダイアログが表示されます。

于 2014-03-27T03:38:06.633 に答える