【问题标题】:How to use bean values in other Java class?如何在其他 Java 类中使用 bean 值?
【发布时间】:2013-12-27 04:00:26
【问题描述】:

我使用表达式语言在 jsf 中将登录表单的值设置为 bean,现在我想在我的其他 Java 程序中获取这些 bean 值。请帮助我如何将这些 bean 值导入其他 Java 程序。我的代码如下:

登录.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<head>
<title>sample jsf</title>
</head>
<body>
    <f:view>
        <h:form>
id:<h:inputText value="#{loginbean.id}" />
            <br />
username:<h:inputText value="#{loginbean.username}" />
            <br />
password:<h:inputSecret value="#{loginbean.password}" />
            <br />
            <h:commandButton action="#{insert.getmethod1()}" value="go" />
        </h:form>
    </f:view>
</body>
</html>

我的 bean:loginbean.java

package com.sensiple.beanvo;

import javax.faces.bean.ManagedBean;

import javax.faces.bean.SessionScoped;

@ManagedBean(name = "loginbean")
@SessionScoped
public class loginbean {
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;

    }

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

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

    }
//beans setting values
    public String getPassword() {
        return password;
    }

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

    }

}

我的动作类:insert.java

在这里,我试图从支持 bean 获取值并尝试进行登录身份验证,但我无法将 bean 值获取到我的类中。

package com.sensiple.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import com.sensiple.beanvo.loginbean;
import com.sensiple.util.RemoteConnection;

@ManagedBean(name = "insert")
@SessionScoped
public class insert {
    public String getmethod1() throws SQLException {
        try
        {
        Connection connection = RemoteConnection.initiateConnection(
                "192.168.3.135", "test", "MBC_User", "root");
        String sql = "select * from login";
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);

        while (resultSet.next()) 
        {
            loginbean loginbean= new loginbean();
            String id = loginbean.getId();
            System.out.println(id);//i am getting null as i created new bean object,how to get bean vales here
            String user = resultSet.getString("id");
            System.out.println(resultSet.getString("id"));
            if ((user == id) && (id != null)) 
            {
            return "Login.xhtml";
            }

        }

    }
    catch (SQLException e) {
        e.printStackTrace();
    }
        return "s.xhtml";

    }
}

【问题讨论】:

  • 为什么同一个页面需要 2 个 bean?
  • 我对 jsf 很陌生..我不知道如何从 jsf 命令按钮调用其他 java 类中的方法..所以使用托管 bean 这是错误的,但我试图点击 java 类方法..我可以知道如何在其他 java 类中调用方法以及如何在 java cladd nethod "getmethod1()" 中使用 bean 值
  • 不是直接从 jsf 页面调用 getmethod1(),而是调用 loginBean 中的一个方法,并通过传递所需的值从中调用 getmoethod1()。
  • @Adarsh 我建议将该评论作为答案移动,然后 OP 可能会接受它。
  • praveenkolla:Java 类不是 Java 程序。 Java 程序是一个定义了public static void main(String[] args) 方法的类,它被JVM 调用并在自己的JVM 实例中运行。您想要/需要的是从另一个类实例调用一个类实例的方法。请记住,这是两个不同的问题。

标签: jsf


【解决方案1】:

将我的回复从 cmets 部分移至正确答案。

在 JSF 中,bean 用于存储网页的状态。创建和丢弃任务都由 JSF 实现执行(因此称为“托管 bean”)。 bean 存储在范围映射中,每次使用 bean 时,JSF 实现都会在范围映射中查找 bean,如果找不到,则创建一个新的。

在您的程序中,loginBean 用于存储登录页面中的所有值。现在,所有存储在 bean 中的数据都将根据 bean 的范围存在(在您的情况下,它是会话范围的)。如果您需要使用 commandButton 从页面调用任何方法,则必须在 managedBean 中定义该方法。在您提供的代码中,您在同一个网页中使用了两个托管 bean。其中一个存储页面状态,另一个保存您使用命令按钮调用的方法。在您的第二个 managedBean 中,您尝试访问存储在第一个 bean 中的值。但是您正在使用 new 运算符这样做。 new 操作符将创建一个新的 bean 实例,它不会包含您需要的任何值。

您需要做的是为您的页面使用一个 managedBean 并从您的页面调用同一个 bean 的方法。这将确保使用相同的 bean 实例并且您可以访问所有存储的值。然后根据您的需要,将所需的值传递给一个简单的 JAVA 类(如果它不直接在任何 JSF 页面中使用,则不必是 managedBean)并调用所需的方法。

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 2012-02-02
    • 2011-03-29
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多