【问题标题】:how to get variable on managed-bean?如何在托管bean上获取变量?
【发布时间】:2013-05-23 17:23:23
【问题描述】:

我正在尝试制作一个登录屏幕,所以我得到了 ıbanNumber 并从用户那里传递并在数据库中检查它。这是可行的,但是当我尝试在另一个页面上使用 `doldur() 来获取具有相同 ıbanNumber 的数据库上的一些信息时,它返回 null。

我该如何解决这种情况,为什么 ibanNumber 返回 null ?

not: 当我点击“Kullanici İslem Menusu.xhtml”页面上的“hesap işlemleri”按钮然后打开“hesap işlemleri.xhtml”并填写数据表时添加jsf页面

@ManagedBean(name = "login")

public class LoginBean {

public LoginBean() {

}
private String ıban_number;
private String sifre;
private String paraCek;
private String paraYatir;


public String getParaCek() {
    return paraCek;
}

public void setParaCek(String paraCek) {
    this.paraCek = paraCek;
}

public String getParaYatir() {
    return paraYatir;
}

public void setParaYatir(String paraYatir) {
    this.paraYatir = paraYatir;
}

public String getIban_number() {
    return ıban_number;
}

public void setIban_number(String ıban_number) {
    this.ıban_number = ıban_number;
}

public String getSifre() {
    return sifre;
}

public void setSifre(String sifre) {
    this.sifre = sifre;
}
db_connection dbLogin = new db_connection();
private PreparedStatement psLogin;
private ResultSet rsLogin;

public String getLogin() {


    try {

        System.out.println(getIban_number() + " " + getSifre());
        psLogin = dbLogin.getCon().prepareStatement("select * from kullanici_giris where ibanNumber=? and sifre=?");
        psLogin.setString(1, getIban_number());
        psLogin.setString(2, getSifre());
        System.out.println("Veri tabanına ulaşıldı");
        rsLogin = psLogin.executeQuery();

        while (rsLogin.next()) {
            return "true";

        }

    } catch (SQLException ex) {
        Logger.getLogger(LoginBean.class.getName()).log(Level.SEVERE, null, ex);
    }

    return "false";
}

public List<getAccountInfo> doldur() {

    System.out.println(getIban_number());
    List<getAccountInfo> liste = new ArrayList<getAccountInfo>();
    try {
        psLogin = dbLogin.getCon().prepareStatement("SELECT * FROM hesap_bilgi where ibanNumber = ? ");
        psLogin.setString(1, getIban_number());
        rsLogin = psLogin.executeQuery();


        while (rsLogin.next()) {
            getAccountInfo obj = new getAccountInfo();

            obj.setIbanNumber(rsLogin.getString(1));
            obj.setToplamButce(rsLogin.getString(2));
            obj.setHarcananButce(rsLogin.getString(3));
            obj.setKalanButce(rsLogin.getString(4));


            liste.add(obj);


        }
    } catch (SQLException ex) {
    }


    return liste;
}
}




    <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Kullanici İslem Menusu</title>
    </h:head>
    <h:body>
        <h:form>
            <h:panelGrid columns="1">

                <h:commandButton value="Hesap İşlemleri" action="hesap_islemleri"/>
                <h:commandButton value="Kişisel İşlemleri" action="kisisel_islemler"/>
                <h:commandButton value="Şubelerimiz" action="subelerimiz"/>
            </h:panelGrid>

        </h:form>
    </h:body>
</html>



<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>


            <h:dataTable value="#{login.doldur()}" var="c">
                <h:column>
                    <f:facet name="header">
                        <h:outputLabel value="ıbanNumber"/>

                    </f:facet>
                    <h:outputLabel value="#{c.ibanNumber}"/>
                </h:column>

                <h:column>
                    <f:facet name="header">
                        <h:outputLabel value="ToplamButce"/>
                    </f:facet>
                    <h:outputLabel value="#{c.toplamButce}"/>
                </h:column>

                <h:column>
                    <f:facet name="header">
                        <h:outputLabel value="HarcananButce"/>
                    </f:facet>
                    <h:outputLabel value="#{c.harcananButce}"/>
                </h:column>

                <h:column>
                    <f:facet name="header">
                        <h:outputLabel value="KalanButce"/>
                    </f:facet>
                    <h:outputLabel value="#{c.kalanButce}"/>
                </h:column>
            </h:dataTable>

        </h:form>
    </h:body>
</html>

【问题讨论】:

  • System.out.println(getIban_number()); 这会打印预期值吗?
  • 请在失败的页面中显示JSF代码。
  • 它的打印为 Null;但是 System.out.println(getIban_number() + " " + getSifre());这打印出我的预期。
  • 你的托管 Bean 的范围是什么?
  • 感谢您的帮助。我添加了@SessionScoped 并实现了 Serializable 它的工作。

标签: jsf managed-bean


【解决方案1】:

您的 iBanNumber 由用户传递并存储在运行第一页时初始化的 bean 实例中。当您从另一个页面调用它时,会为您的托管 bean 创建一个新实例。也许这就是为什么,您第一次在 bean 中设置的值第二次不再可用。尝试将托管 bean 的范围更改为 SessionScoped。这样,bean 中的值将在整个会话期间保留。您可以阅读有关 JSF 会议的更多信息here

【讨论】:

    【解决方案2】:

    获取属性的方式很奇怪。

    例如,如果您有一个托管 bean (name="mBean") 和一个属性“String property”;你有getter和setter“getProperty”和“setProperty”,好吗?

    因此,当您从 xhtml 页面调用它时,通过 Expession Language,您将使用,例如:

    <h:outputText value="#{mBean.property}" />
    

    所以,

    1 - 当您使用 doldur() 时,它真的在工作数据表吗?你不需要像属性“Collection doldur”和它的getter和setter“getDoldur”和“setDoldur”这样的东西吗?

    2 - 相同的思维方式;你不必声明“String ıbanNumber”,然后你有getter和setter“getIbanNumber”和“setIbanNumber”,然后

    <h:outputLabel value="#{c.ibanNumber}"/> 
    

    ?

    先检查这些东西!

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 1970-01-01
      • 2012-02-29
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2015-10-24
      相关资源
      最近更新 更多