簡體   English   中英

價值在 <p:inputText> 不會傳遞給bean

[英]Value in <p:inputText> won't pass to bean

我的代碼有問題,其中各種`的值不會傳遞給Bean。 該代碼基本上與我的舊項目相同(所有項目都工作得很好),但是無論我做什么,bean中的值都不會更新。 我要為用戶填寫表格以注冊帳戶。 我嘗試通過兩種方式進行操作:

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

這里的Register是具有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;
}
}

最后是普通的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()
}

我解決了這個問題。 我有點愚蠢,但是從一開始就沒有任何問題。 事實是,由於所有驗證器和所有內容,在多個字段上將驗證設置為false,這導致值不會回傳的事實。 一旦我設置了所有正確的信息,它就會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM