【问题标题】:Problem in Flex integration with Blazeds using java使用 java 的 Flex 与 Blazeds 集成的问题
【发布时间】:2011-05-20 04:44:57
【问题描述】:

我的名字是 Rahul。我是 flex 新手。我正在尝试使用 java 将 flex 与 blazeds 集成。据我所知,我已经编写了一些代码。但它没有连接到数据库。我在这里粘贴我的代码。请检查一下,如果我在那里犯了任何错误,请告诉我:

我的弹性代码:

<fx:Script>
    <![CDATA[
        import com.hello.vo.FeedbackVO;

        import mx.controls.Alert;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        import mx.utils.ObjectUtil;

        public function insertData():void
        {
            var feedbackvo:FeedbackVO = new FeedbackVO();
            feedbackvo.name = input_name.text;
            feedbackvo.number = input_number.text;
            feedbackvo.email = input_email.text;
            feedbackvo.feedback = input_feedback.text;
            ro.insertData(feedbackvo);
        }
        public function onResult(event:ResultEvent):void
        {
            Alert.show(ObjectUtil.toString(event.result));
        }
        public function onFault(event:FaultEvent):void
        {
            Alert.show(ObjectUtil.toString(event.fault));
        }
    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <s:RemoteObject id="ro"
                    destination="feedback"
                    source="com.hello.Feedback"
                    endpoint="http://localhost:8082/Feedback/messagebroker/amf">
        <s:method name="insertData" 
                  result="onResult(event)"
                  fault="onFault(event)"/>
    </s:RemoteObject>
</fx:Declarations>  
    <s:BorderContainer x="0"
                       y="0"
                       width="100%"
                       height="100%">
        <s:Panel width="364"
                 height="333" x="206" y="83">
            <mx:Form x="0"
                     y="0"
                     width="100%"
                     height="100%">
                <mx:FormItem label="Name:">
                    <s:TextInput id="input_name" width="249"/>
                </mx:FormItem>
                <mx:FormItem label="Number:">
                    <s:TextInput id="input_number" width="249"/>
                </mx:FormItem>
                <mx:FormItem label="Email:">
                    <s:TextInput id="input_email" width="248"/>
                </mx:FormItem>
                <mx:FormItem label="Feedback:">
                    <s:TextInput id="input_feedback" width="248" height="143"/>
                </mx:FormItem>
                <mx:FormItem>
                    <s:Button id="insert_btn"
                              label="Insert Data"
                              click="insertData();"/>
                </mx:FormItem>
            </mx:Form>
        </s:Panel>
    </s:BorderContainer>

我的 Java 代码:

反馈VO.java:

package com.hello.vo;

public class FeedbackVO
{
private String name;
private String number;
private String email;
private String feedback;

public String getName() 
{
    return name;
}
public void setName(String name)
{
    this.name = name;
}
public String getNumber() 
{
    return number;
}
public void setNumber(String number)
{
    this.number = number;
}
public String getEmail() 
{
    return email;
}
public void setEmail(String email) 
{
    this.email = email;
}
public String getFeedback()
{
    return feedback;
}
public void setFeedback(String feedback) 
{
    this.feedback = feedback;
}   
}

反馈.java:

package com.hello;

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

import com.hello.vo.FeedbackVO;

public class Feedback 
{

Connection connection;
Statement stmt;
ResultSet rs;

public Feedback()
{
    String host = "localhost";
    String port = "5432";
    String dbName = "test";
    Connection connection = null;
    try
    {
        connection = DriverManager.getConnection(
                "jdbc:postgresql://" + host + ":" + port + "/" + dbName,"postgres", "admin");
        System.out.println("Database is connected");
        stmt = connection.createStatement();
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}
public String insertData(FeedbackVO feedbackvo)
{
    try
    {
        stmt = connection.createStatement();
        String sql = "INSERT into feedback(name,number,email,feedback) VALUES ('" + feedbackvo.getName() + "','" + feedbackvo.getNumber() + "','" + feedbackvo.getEmail() + "','" + feedbackvo.getFeedback() +"')";
        if(stmt.execute(sql))
        {
            return "Thanks For your Valuable Feedback";
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return "Sorry Your feedback is not entered";
}
}

如果我尝试执行 Feedback.mxml,那么我会得到“抱歉您的反馈未输入”作为输出。我不知道问题出在哪里。我认为 flex 连接成功,但问题出在 java 代码中。如果有人有想法请帮帮我。

非常感谢, 拉胡尔

【问题讨论】:

    标签: java apache-flex postgresql flex4 blazeds


    【解决方案1】:
    1. 您应该在服务器代码中使用日志记录(例如 log4j、slf4j)来记录您的异常。
    2. 您应该返回成功代码或简单地抛出异常,而不是作为insertData() 的结果返回消息。两者都可以在客户端处理,这样更容易显示本地化消息。
    3. 使用连接池并在完成工作后立即关闭连接。
    4. 只要定义一个本地的Statement变量,最后调用close()
    5. 熟悉debugging web applications in Tomcat
    6. 使用executeUpdate(),您的错误应该会消失。如果结果是更新计数并且您正在执行 INSERT 语句,则execute() 返回 false,因此它会这样做。

    这是我的建议:

    private Connection getConnection() throws SQLException
    {
        // get a connection from the connection pool
    }
    
    public int insertFeedback(FeedbackVO feedbackvo) throws SQLException
    {
        try
        {
            Connection con = getConnection();
            try
            {
                String sql = "INSERT INTO feedback(name,number,email,feedback) " + 
                    "VALUES (?, ?, ?, ?)";
                PreparedStatement stmt = connection.prepareStatement();
                try
                {
                    stmt.setString(1, feedbackvo.getName());
                    stmt.setString(2, feedbackvo.getNumber());
                    stmt.setString(3, feedbackvo.getEmail());
                    stmt.setString(4, feedbackvo.getFeedback());
                    return stmt.executeUpdate(sql);
                }
                finally
                {
                    stmt.close();
                }
            }
            finally
            {
                con.close();
            }
        }
        catch (SQLException e)
        {
            log.error(e);
            throw e;      
        }
    }
    

    【讨论】:

    • 嗨,飞溅,我是 FLEX 和 JAVA 的新手。我需要创建一个集成 FLEX 和 JAVA 的应用程序。我想知道这怎么可能。需要哪些软件?请尽快回复我。我非常渴望学习这个东西。
    • @SagarRawal:在 Google 上搜索“flex java”应该会引导您到adobe.com/devnet/flex/flex_java.html,这是一个非常好的 Flex/Java 开发资源汇编。
    【解决方案2】:

    INSERT 可能有问题。很难说是什么(基本语法没问题),但是通过简单地连接字符串,它很容易受到特殊字符的影响,例如传递给查询的值中的引号(以及 SQL 注入攻击)。更好用Prepared Statements

    此外,打印的那些异常堆栈跟踪可能包含解决问题的有用信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2011-04-05
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多