无法使用@ManagedProperty显示DB的结果

时间:2012-01-27 10:40:43

标签: java java-ee jpa jsf-2

我问的问题可能很简单。 登录成功后,我想显示用户详细信息。

我的loginController

  public LoginController() {
}

public String getPassword() {
    return password;
}

public String getUsername() {
    return username;
}

public void setPassword(String password) {
    this.password = password;
}

public void setUsername(String username) {
    this.username = username;
}

public String isValidUser() {
    String isValid="Invalid user";
    EntityManager em = null;
    try {
        em = getEntityManager();
        Query query = em.createNamedQuery("ClientDetails.findByClientId");
        query.setParameter("clientId", username);
        //hashPassword(password);
        ClientDetails record = (ClientDetails) query.getSingleResult();
        System.out.print(record);
        String passwordHash=hashPassword(password);
        if (record.getPassword().equals(passwordHash)) {
             System.out.print("Valid user");
            isValid = "valid";
        } else {
            System.out.print("InValid user");
            isValid="invalid";
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        em.close();
    }
    System.out.println("Login status = " + isValid);
    return isValid;
}

private EntityManager getEntityManager() {
    return emf.createEntityManager();
}

public String hashPassword(String password) {
    String protectedPassword = null;
    try {
        System.out.println("password entered....." + password);
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(password.getBytes());
        BigInteger hash = new BigInteger(1, md5.digest());
        protectedPassword = hash.toString(16);
        System.out.println("password hashed....." + protectedPassword);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return protectedPassword;
}

我有EditController托管bean类

  @Resource
private UserTransaction utx = null;
@PersistenceUnit(unitName = "AdminPU")
private EntityManagerFactory emf = null;
private ClientDetails clientDetails;
private ClientWebsiteDetails clientWebsiteDetails;

@ManagedProperty(value="#{loginController}")
private LoginController login;

   private Boolean booleanFacebook;
    private Boolean booleanTwitter;
    private Boolean booleanClientSocial;

public EditAccountController() {
}

public Boolean getBooleanClientSocial() {
    return booleanClientSocial;
}

public Boolean getBooleanFacebook() {
    return booleanFacebook;
}

public Boolean getBooleanTwitter() {
    return booleanTwitter;
}

public void setBooleanClientSocial(Boolean booleanClientSocial) {
    this.booleanClientSocial = booleanClientSocial;
}

public void setBooleanFacebook(Boolean booleanFacebook) {
    this.booleanFacebook = booleanFacebook;
}

public void setBooleanTwitter(Boolean booleanTwitter) {
    this.booleanTwitter = booleanTwitter;
}

public ClientDetails getClientDetails() {
    if (clientDetails == null) {
        clientDetails = new ClientDetails();
    }
    return clientDetails;
}

public ClientWebsiteDetails getClientWebsiteDetails() {
    if (clientWebsiteDetails == null) {
        clientWebsiteDetails = new ClientWebsiteDetails();
    }
    return clientWebsiteDetails;
}

public LoginController getLogin() {
    return login;
}

public void setLogin(LoginController login) {
    this.login = login;
}

  public String getAccountDetails() {
    String result = "Details not saved";
    EntityManager em = null;
    try {
        System.out.println("Retreiving client details");
        utx.begin();
        em = getEntityManager();
        clientDetails.setClientId(login.getUsername());
        Query customerDetails = em.createQuery("ClientDetails.findByClientId");
        Query websiteDetails = em.createQuery("ClientWebsiteDetails.findByClientAccountId");
        List customerList = customerDetails.getResultList();
        List websiteList = websiteDetails.getResultList();
        Iterator clientIt = customerList.iterator();
        Iterator websiteIt = websiteList.iterator();
        while (clientIt.hasNext()) {
            clientDetails = (ClientDetails) clientIt.next();
            clientDetails.setPrimaryContactName(clientDetails.getPrimaryContactName());
            clientDetails.setCompany(clientDetails.getCompany());
            clientDetails.setPrimaryEmailId(clientDetails.getPrimaryEmailId());
            clientDetails.setPrimaryContactNo(clientDetails.getPrimaryContactNo());
            clientDetails.setPrimaryDesignation(clientDetails.getPrimaryDesignation());
        }
        while (websiteIt.hasNext()) {
            clientWebsiteDetails = (ClientWebsiteDetails) websiteIt.next();
            clientWebsiteDetails.setProductionUrl(clientWebsiteDetails.getProductionUrl());
            clientWebsiteDetails.setSiteName(clientWebsiteDetails.getSiteName());
            clientWebsiteDetails.setDescription(clientWebsiteDetails.getDescription());
            clientWebsiteDetails.setFacebook(clientWebsiteDetails.getFacebook());
            clientWebsiteDetails.setTwitter(clientWebsiteDetails.getTwitter());
            clientWebsiteDetails.setClientSocial(clientWebsiteDetails.getClientSocial());
        }

        if ((clientWebsiteDetails.getFacebook().equals("y")) && (clientWebsiteDetails.getTwitter().equals("y"))) {
            booleanFacebook = true;
            booleanTwitter = true;
        booleanClientSocial = false;
    } else if ((clientWebsiteDetails.getFacebook().equals("n")) && (clientWebsiteDetails.getTwitter().equals("n") && (clientWebsiteDetails.getClientSocial().equals("n")))) {
        booleanFacebook = false;
        booleanTwitter = false;
        booleanClientSocial = false;
    }
    System.out.print(utx.getStatus());
    utx.commit();
} catch (Exception e) {
    e.printStackTrace();
}
return result;

}

editaccount.xhtml

<h:form id="RegisterForm">
      <h:commandLink value="Logout" action=""></h:commandLink>
         <h:commandLink value="Change Password" action=""></h:commandLink>
      <h:outputLabel value=""></h:outputLabel>
        <h:panelGrid>
            <h1>Customer Information</h1>
            <h:outputLabel value="Name:" for="name" />
            <h:inputText id="name" required="true" requiredMessage="Please enter your name"  value="#{editAccountController.clientDetails.primaryContactName}">
                <f:validateLength maximum="50"></f:validateLength>
            </h:inputText>
            <h:message for="name"></h:message>

            <h:outputLabel value="Company:" for="company" />
            <h:inputText id="company" required="true" requiredMessage="Please enter your company" value="#{editAccountController.clientDetails.company}">
                <f:validateLength maximum="50"></f:validateLength>
            </h:inputText>
            <h:message for="company"></h:message>

            <h:outputLabel value="Designation:" for="designation" />
            <h:inputText id="designation" required="true"  requiredMessage="Please enter your designation" value="#{editAccountController.clientDetails.primaryDesignation}">
                <f:validateLength maximum="50"></f:validateLength>
            </h:inputText>
            <h:message for="designation"></h:message>

            <h:outputLabel value="Email Id:" for="email" />
            <h:inputText id="email" required="true" requiredMessage="Please enter your email, eg:yourid@domain.com"  value="#{editAccountController.clientDetails.primaryEmailId}">
                <f:validateLength maximum="70"></f:validateLength>
            </h:inputText>
            <h:message for="email"></h:message>

            <h:outputLabel value="Contact No:" for="phone" />
            <h:inputText id="phone" required="true" requiredMessage="Please enter your contact number" value="#{editAccountController.clientDetails.primaryContactNo}">
                <f:validateLength minimum="10" maximum="25"></f:validateLength>
            </h:inputText>
            <h:message for="phone"></h:message>  


            <h2>Website Information</h2>
            <h:outputLabel value="Domain:" for="production_url" />
            <h:inputText id="production_url" required="true" requiredMessage="Please enter domain name,eg:www.domain.com OR yourip/app_name"  value="#{editAccountController.clientWebsiteDetails.productionUrl}">
                <f:validateLength maximum="50"></f:validateLength>
            </h:inputText>
            <h:message for="production_url"></h:message>

            <h:outputLabel value="Site Name:" for="site_name" />
            <h:inputText id="site_name" required="true" requiredMessage="Please enter website name"  value="#{editAccountController.clientWebsiteDetails.siteName}">
                <f:validateLength maximum="255"></f:validateLength>
            </h:inputText>
            <h:message for="site_name"></h:message>

            <h:outputLabel value="Description:" for="description" />
            <h:inputTextarea id="description" rows="2" cols="40" requiredMessage="Please enter website description" value="#{editAccountController.clientWebsiteDetails.description}" title="Description about the website in few lines" required="required">
                <f:validateLength maximum="250"></f:validateLength>
            </h:inputTextarea>
            <h:message for="description"></h:message>



            <h3>Social Integration</h3>
            <h:outputLabel for="fb" value="Facebook:"></h:outputLabel>
            <h:selectBooleanCheckbox id="fb" value="#{editAccountController.booleanFacebook}" title="Select to integrate our Facebook app in your site">
            </h:selectBooleanCheckbox>
            <h:outputLabel for="tweet" value="Twitter:"></h:outputLabel>
            <h:selectBooleanCheckbox id="tweet" value="#{editAccountController.booleanTwitter}" title="Select to integrate our Twitter app in your site"></h:selectBooleanCheckbox>
            <h:outputLabel for="your_app" value="Integrate your social app with BazaAR:"></h:outputLabel>
            <h:selectBooleanCheckbox id="your_app" value="#{editAccountController.booleanClientSocial}" title="Select to integrate your social apps"></h:selectBooleanCheckbox>

            <h:commandButton value="Register" type="submit" action="#{editAccountController.saveAccountDetails}"></h:commandButton>

        </h:panelGrid>
    </h:form>

两者都是托管bean,并且处于会话范围内。该应用程序是Java EE 5。

我需要用户在editController中输入的用户名。我想我正在使用ManageProperty错误。你们可以指出我如何使用ManageProperty,这样如果在我的ClientDetails POJO中将用户名设置为我的电子邮件字段,我就可以获得该值。

1 个答案:

答案 0 :(得分:1)

您需要将EL-Expression放入ManagedProperty:

@ManagedProperty(value="#{loginController}")

确保名称正确。并且LoginController具有正确的注释。