Значения бина не отображаются на странице JSF
Вот чего я пытаюсь добиться:
1) Когда пользователь пытается войти в систему, используя свой идентификатор пользователя / пароль, эти учетные данные проверяются по моей таблице базы данных, чтобы убедиться, что пользователь действителен. 2) Когда проверка проходит успешно, я получаю некоторые сведения о пользователе и отображаю эти значения на странице JSF сразу после входа в систему.
Оба эти процесса происходят по одному клику (то есть), пока пользователь вводит свой идентификатор пользователя / пароль и нажимает кнопку "Отправить".
Что я сделал:
Когда пользователь нажимает "Отправить" при входе в систему, я использую запрос, чтобы сравнить значения с таблицей в bean-компоненте с именем "login" (имя управляемого бина). Когда значения присутствуют в таблице, я использую другой запрос для получения другой информации пользователя и заполняю эти значения в методах установки в другом компоненте, называемом "полями". Теперь, используя перенаправление лиц, я передаю имя страницы JSF, которая называется userindex.xhtml. Теперь я просто пытаюсь получить доступ к методам получения бина "fields" для отображения на странице userindex.
Первые два запроса успешно выполнены. Единственная проблема, по-видимому, заключается в том, что объект бина "fields" инициализируется / воссоздается, когда я пытаюсь получить доступ к его значениям со страницы "userindex". Пожалуйста, поправьте меня, если я ошибаюсь.
Подводя итог, я использовал bean-компонент "login" для проверки входных значений пользователя с помощью внутренней таблицы, получил доступ к другому bean-компоненту "fields" из bean-компонента login, чтобы установить всю информацию, связанную с пользователем, и использовал эти значения "fields" для заполнения в "userindex" "страница.
Фрагменты кода приведены ниже:
Страница авторизации:
<h:form style="margin:auto;width:90%;height:98%;text-align:left; background-color: whitesmoke; border-top-style: outset ">
<p:panelGrid columns="2" style="margin-left:400px">
<h:outputLabel for="npi" value="Enter your NPI: *" />
<p:inputText id="npi" value="#{login.contactid}" label="NPI" />
<h:outputLabel for="pwd" value="Password: *" />
<p:password id="pwd" value="#{login.pwd}" required="true" label="password"/>
<f:facet name="footer">
<p:commandButton id="prologin" value="Login" action="#{login.checkUser()}" />
</f:facet>
</p:panelGrid>
</h:form>
Бин входа в систему:
package com.superlist;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
@ManagedBean(name = "login")
@SessionScoped
public class UserBean {
@ManagedProperty(value = "#{fields}")
private ProviderFieldsBean fields;
public void setFields(ProviderFieldsBean fields) {
this.fields = fields;
}
private String contactid;
private String pwd;
@Resource(name = "jdbc/mysuperlist")
private DataSource ds;
PreparedStatement searchQuery, query = null;
Connection conn = null;
ResultSet rs, rs1;
public void UserBean() {
try {
Context ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysuperlist");
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* @return the firstname
*/
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "index.xhtml?faces-redirect=true";
}
/**
* @return the pwd
*/
public String getPwd() {
return pwd;
}
/**
* @param pwd the pwd to set
*/
public void setPwd(String pwd) {
this.pwd = pwd;
}
/**
* @return the contactID
*/
public String getContactid() {
return contactid;
}
/**
* @param contactID the contactID to set
*/
public void setContactid(String contactid) {
this.contactid = contactid;
}
public String checkUser() throws SQLException {
System.out.println("inside check provider");
String url;
int rowcount = 0;
try {
conn = ds.getConnection();
String q = "Select npi from providerlogin where npi =" + "'" + contactid + "'"
+ " and password=" + "'" + pwd + "'";
System.out.println("query is " + q);
searchQuery = conn.prepareStatement(q);
rs = searchQuery.executeQuery();
rs.last();
rowcount = rs.getRow();
rs.beforeFirst();
System.out.println("total no of rows is " + rowcount);
if (rowcount > 0) {
String q1 = "select ContactID, FirstName,LastName,Email,Phone from fulltable where ContactID = "
+ "'" + contactid + "'";
query = conn.prepareStatement(q1);
System.out.println("the query is " + q1);
rs1 = query.executeQuery();
while(rs1.next())
{
fields.setAll(rs1.getString(2),rs1.getString(3),rs1.getString(4),rs1.getString(5));
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
searchQuery.close();
query.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (rowcount > 0) {
System.out.println("rowcount > 0");
url = "userindex?faces-redirect=true";
}
else {
System.out.println("rowcount = 0");
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "User Error", "Invalid creditientials"));
url = "login?faces-redirect=true";
}
return url;
}
Поля бобов:
package com.superlist;
import java.io.Serializable;
import java.sql.SQLException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="fields")
@SessionScoped
public class ProviderFieldsBean{
private String firstname;
private String lastname;
private String contactid;
private String phone;
private String email;
public ProviderFieldsBean(){
}
public void setAll(String firstname, String lastname, String email, String phone)
{
this.firstname = firstname;
this.lastname = lastname;
this.email = email;
this.phone = phone;
}
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 String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Страница пользовательского индекса
<h:form style="margin:auto;width:90%;height:98%;text-align:left; background-color: whitesmoke; border-top-style: outset">
<h:panelGrid columns="2" style="margin-left:350px;">
<f:facet name="header">
Your details
</f:facet>
<h:outputLabel for="firstname" value="Firstname: *" />
<h:outputText id="firstname" value="#{fields.firstname}" />
<h:outputLabel for="surname" value="Surname: *" />
<h:outputText id="surname" value="#{fields.lastname}"/>
<h:outputLabel for="email" value="Email: *" />
<h:outputText id="email" value="#{fields.email}"/>
<f:facet name="footer">
<p:commandButton type="button" value="Update!" icon="ui-icon-check" style="margin:0"/>
</f:facet>
</h:panelGrid>
</h:form>
Пожалуйста, дайте мне знать, как действовать дальше. Любая помощь с благодарностью. Заранее спасибо!
2 ответа
Я предполагаю, что ProviderFieldBean является классом модели.. если он должен быть аннотирован с помощью @table..it не должен иметь аннотации для сеансовой области или управляемых бобов
Как сказал г-н @MrJ4mes, там скучаю по тебе setter
для вашего введенного управляемого боба ProviderFieldsBean fields
обеспечить доступ через представления.