Проблема в интеграции Flex с Blazeds с использованием java

#java #apache-flex #postgresql #flex4 #blazeds

#java #apache-flex #postgresql #flex4 #blazeds

Вопрос:

Меня зовут Рахул.Я новичок в flex. Я пытаюсь интегрировать flex с blazeds с использованием java. Я написал некоторый код, насколько мне известно. Но это не подключение к базе данных. Я вставляю сюда свой код.Пожалуйста, изучите это и дайте мне знать, если я допустил какие-либо ошибки там:

Мой гибкий код:

 <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-код:

FeedbackVO.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;
}   
}
  

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.Если у кого-нибудь есть идея, пожалуйста, помогите мне.

Большое спасибо, Рахул

Ответ №1:

  1. Вам следует использовать протоколирование (например, log4j, slf4j) в коде вашего сервера для протоколирования ваших исключений.
  2. Вместо того, чтобы возвращать сообщение в результате insertData() , вы должны вернуть код успеха или просто выдать исключение. Оба варианта могут быть обработаны на стороне клиента, где проще отобразить локализованное сообщение.
  3. Используйте пул подключений и закройте свое соединение сразу после завершения работы.
  4. Просто определите локальную Statement переменную и, наконец, вызовите close()
  5. Ознакомьтесь с отладкой веб-приложений в Tomcat
  6. Используйте executeUpdate (), и ваша ошибка должна исчезнуть. execute() возвращает false , если результатом является количество обновлений, и вы выполняете INSERT инструкцию, поэтому она это сделает.

Это было бы моим предложением:

 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;      
    }
}
  

Комментарии:

1. Привет, splash, я совершенно новичок в FLEX и JAVA. Мне нужно создать приложение, которое интегрирует FLEX и JAVA. Я хочу знать, как это возможно. Какое программное обеспечение требуется? Пожалуйста, ответьте мне как можно раньше. Я очень хочу изучить эту вещь.

2. @SagarRawal: Поиск в Google с помощью «flex java» должен направить вас на adobe.com/devnet/flex/flex_java.html который является очень хорошей компиляцией ресурсов разработки Flex / Java.

Ответ №2:

Вероятно, что-то пошло не так со ВСТАВКОЙ. Трудно сказать, что именно (базовый синтаксис в порядке), но простое объединение строк делает его уязвимым для специальных символов, таких как кавычки в значениях, передаваемых в запросе (и атак SQL-инъекций). Гораздо лучше использовать подготовленные инструкции

Также те трассировки стека исключений, которые печатаются, могут содержать полезную информацию для решения проблемы.