2

さまざまな`の値がBeanに渡されないというコードに問題があります。コードは基本的に私の古いプロジェクト(すべてが完全に正常に機能した)と同じですが、何をしてもBeanの値は更新されません。私がやりたいのは、ユーザーがアカウントを登録するためにフォームに記入することです。私は2つの方法でそれをやってみました:

<p:inputText id="address" value="#{Register.user.address}.../>

Registerこれは、Userクラスのプロパティuserを持つBeanです。ここには、Stringアドレスを含むいくつかのプロパティがあります。これは実際には機能しなかったので、getterとsetterをRegisterBeanに入れて、この形式に設定してみました

public String getAddress(){
    return user.getAdress();
}

xhtmlでこのように使用します

<p:inputText id="address" value="#{Register.address]".../>

しかし、それでも機能しません。デバッグを試みましたが、セッターがまったく入力されていないようです。なぜこれが機能しないのか、そして潜在的にそれを修正する方法を誰かが知っていますか?

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

.xhtml

<h:head>
        <title>Register</title>
    </h:head>
    <body>
        <ui:composition template="userTemplate.xhtml">
            <ui:define name="content">
                <h:form>
                    <h:panelGrid id="grid" columns="3" >
                        <f:facet name="header">
                             Please fill in the required information  
                        </f:facet> 
                    <p:outputLabel value="Username" />
                    <p:inputText  id="username" value="#{Register.user.username}" validator="#{Register.validateUsername}" required="true" requiredMessage="Cannot be blank!"/>
                    <p:message for="username"/>
                    <p:outputLabel value="Password"/>
                    <p:password id="password" value="#{Register.user.password}" validator="#{Register.validatePasswords}"/>
                    <p:message for="password" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="Repeat password" />
                    <p:password id="repPassword" value="#{Register.user.repeatPass}" validator="#{Register.validateRepPassword}"/>
                    <p:message for="repPassword" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="First name" />
                    <p:inputText id="firstName" value="#{Register.user.firstName}"/> 
                    <p:message for="firstName" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="Surname" />
                    <p:inputText id="surname" value="#{Register.user.surname}" required="true" requiredMessage="Cannot be blank!"/> 
                    <p:message for="surname" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="Address" />
                    <p:inputText id="address"  value="#{Register.user.address}" required="true" requiredMessage="Cannot be blank!"/>
                    <p:message for="address" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="Postnumber"/>
                    <p:inputText id="postnumber" value="#{Register.user.postnumber}" validatorMessage="Can only be numbers!" required="true" requiredMessage="Cannot be blank!"/>
                    <p:message for="postnumber" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="City"/>
                    <p:inputText id="city" value="#{Register.user.city}" required="true" requiredMessage="Cannot be blank!"/>
                    <p:message for="city" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="E-mail" />
                    <p:inputText id="email" validator="#{Register.user.validateEmail}" value="#{Register.email}"/>
                    <p:message for="email" showSummary="true" showDetail="false"/>
                    <p:outputLabel value="Phone number" />
                    <p:inputText id="phone" value="#{Register.user.phone}" required="true" validatorMessage="Phone number must be between 8 and 16 numbers long" requiredMessage="Cannot be blank!">
                        <f:validateLongRange  minimum="8" maximum="16"/>
                    </p:inputText> 
                    <p:message for="phone" showDetail="false" showSummary="true"/>
                    <p:commandButton type="submit" id="submitButton" value="submit" update="grid" ajax="true"/>
                    <p/>
                    #{Register.user}
                </h:panelGrid>
            </h:form>
        </ui:define>
    </ui:composition>
</body>
</html>

豆:

@SessionScoped
@ManagedBean(name="Register")
public class registerBean implements Serializable {
private User user = new User();

public void validateUsername(FacesContext context, UIComponent component, Object value) {
    String message = "";
    String username = (String) value;
    if(username == null || username.equals("")) {
        ((UIInput)component).setValid(false);
        message = "Enter a username";
        context.addMessage(component.getClientId(context), new FacesMessage(message));
    }
    //else user.setUsername(username);
}

public void validatePasswords(FacesContext context, UIComponent component, Object value) {
    String message = "";
    String password = (String) value;
    boolean hasNumber = false;
    for(int i = 0; i < password.length(); i++) {
        if(Character.isDigit(password.charAt(i))) {
            hasNumber = true;
        }
    }
    if(!hasNumber && password.length() < 8) {
        ((UIInput)component).setValid(false);
        message = "You need to have at least one number and the password must be atleast 8 characters long";
        context.addMessage(component.getClientId(context), new FacesMessage(message));
    }
    //else user.setPassword(password);
}

public void validateRepPassword(FacesContext context, UIComponent component, Object value) {
    String message = "";
    String repPassword = (String) value;
    if(!repPassword.equals(user.getPassword())) {
        ((UIInput)component).setValid(false);
        message = "The passwords don't match.";
        context.addMessage(component.getClientId(context), new FacesMessage(message));
    }
    //else user.setRepeatPass(repPassword);

}
public void validatePostnumber(FacesContext context, UIComponent component, Object value) {
    String message = "";
    try {
      Integer postnumber = (Integer) value;
    } catch (Exception e) {
        ((UIInput)component).setValid(false);
        message = "The postnumber can only be numbers";
        context.addMessage(component.getClientId(context), new FacesMessage(message));
    }
    //user.setPostnumber(((Integer) value).intValue());
}
public void validateEmail(FacesContext context, UIComponent component, Object value) {
    String message = "";
    try {
        InternetAddress email = new InternetAddress((String) value);
        email.validate();
    } catch(AddressException ae) {
        ((UIInput)component).setValid(false);
        message = "Type a valid email address";
        context.addMessage(component.getClientId(context), new FacesMessage(message));
    }
    //user.setEmail((String)value);
}
public User getUser() {
    return user;
}
}

そして最後に、通常のUserjavaクラス

public class User {

private String username;
private String password;
private String repeatPass;
private String address;
private int postnumber;
private String city;
private String firstName;
private String surname;
private String email;
private long phone;

+setters/getters and a toString()
}
4

1 に答える 1

0

私は問題を理解しました。ちょっとバカな気がしますが、最初から何の問題もありませんでした。問題は、すべてのバリデーターとすべてのために、いくつかのフィールドで検証がfalseに設定され、値が戻されなかったという事実につながったということでした。すべての正しい情報を設定するとすぐに機能しました。

于 2013-04-09T09:49:58.190 に答える