0

私はJSFが初めてです。Primefaces 公式サイトのウィザード コンポーネントを使用しようとしていますが、問題に直面しています。次のタブに移動すると、前のタブの情報が削除されます。User Bean を除いて、サイトのコードを使用しました。デバッグを行ったところ、[次へ] ボタンが押されるたびに、各フィールドのセッターが呼び出されますが、前の手順で設定されたフィールドは null であることがわかりました。私はprimefaces 3.5バージョンとjsf-apiおよびjsf-impl 2.1.18を使用しています。

コードは次のとおりです。

ユーザーウィザード:

@ManagedBean(name="userWizardBean")
@SessionScoped
public class UserWizard {

private User user = new User();
private boolean skip;

private static Logger logger = Logger.getLogger(UserWizard.class.getName());

public User getUser() {
    return user;
}

public void setUser(User user) {
   this.user = user;
}

public void save(ActionEvent actionEvent) {
    //Persist user

    FacesMessage msg = new FacesMessage("Successful", "Welcome :" + user.getFirstname());
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

public boolean isSkip() {
    return skip;
}

public void setSkip(boolean skip) {
    this.skip = skip;
}

public String onFlowProcess(FlowEvent event) {
    logger.info("Current wizard step:" + event.getOldStep());
    logger.info("Next step:" + event.getNewStep());

    if(skip) {
        skip = false;   //reset in case user goes back
        return "confirm";
    }
    else {
        return event.getNewStep();
    }
}

}

ユーザー:

public class User {

private String firstname;
private String lastname;
private Integer age;
private String street;
private String city;
private String postalCode;
private String info;
private String email;
private String phone;

public User(String firstname, String lastname, Integer age, String street, String city, String postalCode, String info, String email, String phone) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.age = age;
    this.street = street;
    this.city = city;
    this.postalCode = postalCode;
    this.info = info;
    this.email = email;
    this.phone = phone;
}

public User() {

}

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

public String getStreet() {
    return street;
}

public void setStreet(String street) {
    this.street = street;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public String getPostalCode() {
    return postalCode;
}

public void setPostalCode(String postalCode) {
    this.postalCode = postalCode;
}

public String getInfo() {
    return info;
}

public void setInfo(String info) {
    this.info = info;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}
}

そしてxhtmlファイル:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core">
<h:head>
</h:head>
<h:body>
  <h:form>

    <p:growl id="growl" sticky="true" showDetail="true"/>

    <p:wizard widgetVar="wiz"
              flowListener="#{userWizard.onFlowProcess}">

        <p:tab id="personal" title="Personal">

            <p:panel header="Personal Details">

                <h:messages errorClass="error"/>

                <h:panelGrid columns="2" columnClasses="label, value" styleClass="grid">
                    <h:outputText value="Firstname: *" />
                    <p:inputText required="true" label="Firstname"
                                 value="#{userWizard.user.firstname}" />

                    <h:outputText value="Lastname: *" />
                    <p:inputText required="true" label="Lastname"
                                 value="#{userWizard.user.lastname}" />

                    <h:outputText value="Age: " />
                    <p:inputText value="#{userWizard.user.age}" />

                    <h:outputText value="Skip to last: " />
                    <h:selectBooleanCheckbox value="#{userWizard.skip}" />
                </h:panelGrid>
            </p:panel>
        </p:tab>

        <p:tab id="address" title="Address">
            <p:panel header="Adress Details">

                <h:messages errorClass="error"/>

                <h:panelGrid columns="2" columnClasses="label, value">
                    <h:outputText value="Street: " />
                    <p:inputText value="#{userWizard.user.street}" />

                    <h:outputText value="Postal Code: " />
                    <p:inputText value="#{userWizard.user.postalCode}" />

                    <h:outputText value="City: " />
                    <p:inputText value="#{userWizard.user.city}" />

                    <h:outputText value="Skip to last: " />
                    <h:selectBooleanCheckbox value="#{userWizard.skip}" />
                </h:panelGrid>
            </p:panel>
        </p:tab>

        <p:tab id="contact" title="Contact">
            <p:panel header="Contact Information">

                <h:messages errorClass="error"/>

                <h:panelGrid columns="2" columnClasses="label, value">
                    <h:outputText value="Email: *" />
                    <p:inputText required="true" label="Email"
                                 value="#{userWizard.user.email}" />

                    <h:outputText value="Phone: " />
                    <p:inputText value="#{userWizard.user.phone}"/>

                    <h:outputText value="Additional Info: " />
                    <p:inputText value="#{userWizard.user.info}"/>
                </h:panelGrid>
            </p:panel>
        </p:tab>

        <p:tab id="confirm" title="Confirmation">
            <p:panel header="Confirmation">

                <h:panelGrid id="confirmation" columns="6">
                    <h:outputText value="Firstname: " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.firstname}" />

                    <h:outputText value="Lastname: " />
                    <h:outputText  styleClass="outputLabel"
                                   value="#{userWizard.user.lastname}"/>

                    <h:outputText value="Age: " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.age}" />>

                    <h:outputText value="Street: " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.street}" />

                    <h:outputText value="Postal Code: " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.postalCode}" />

                    <h:outputText value="City: " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.city}" />

                    <h:outputText value="Email: " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.email}" />

                    <h:outputText value="Phone " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.phone}"/>

                    <h:outputText value="Info: " />
                    <h:outputText styleClass="outputLabel"
                                  value="#{userWizard.user.info}" />

                    <h:outputText />
                    <h:outputText />
                </h:panelGrid>

                <p:commandButton value="Submit" update="growl"
                                 actionListener="#{userWizard.save}"/>

            </p:panel>
        </p:tab>

    </p:wizard>

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

ヘルプやヒントをいただければ幸いです。ありがとう

4

2 に答える 2