2

我的代码存在问题,其中来自各种 ` 的值不会传递给 bean。代码与我的旧项目基本相同(一切工作正常),但无论我做什么,bean 中的值都不会更新。我想要做的是让用户填写表格以注册帐户。我尝试通过两种方式做到这一点:

<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;
}
}

最后是普通的用户 java 类

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 回答