2011-12-08 5 views
0

私はGWTとHibernateの非常に初心者です。私は、Hibernateを使ってMySQLにユーザを追加する単純なGWT RPCアプリケーションを作った。私は、サービスインターフェース、すなわち、ユーザーにHibernateメソッドを呼び出すMySQLにfirstname & LastNameを追加するaddUserという単一のメソッドを宣言しました。それは正常に動作しています。 DB &ディスプレイからユーザを検索する2番目の方法が追加されました。ここGWT - Hibernate:GWTクライアントにMySQLからの結果を表示するには

ここエントリポイントクラスここ

package rpctest.client; 

import java.util.ArrayList; 

import hibDomain.User; 
import rpctest.shared.FieldVerifier; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.core.client.GWT; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.event.dom.client.KeyCodes; 
import com.google.gwt.event.dom.client.KeyPressEvent; 
import com.google.gwt.event.dom.client.KeyUpEvent; 
import com.google.gwt.event.dom.client.KeyUpHandler; 
import com.google.gwt.user.client.Window; 
import com.google.gwt.user.client.rpc.AsyncCallback; 
import com.google.gwt.user.client.ui.Button; 
import com.google.gwt.user.client.ui.DialogBox; 
import com.google.gwt.user.client.ui.FlexTable; 
import com.google.gwt.user.client.ui.HTML; 
import com.google.gwt.user.client.ui.HorizontalPanel; 
import com.google.gwt.user.client.ui.Label; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.google.gwt.user.client.ui.TextBox; 
import com.google.gwt.user.client.ui.VerticalPanel; 

import com.google.gwt.event.dom.client.KeyCodes; 
import com.google.gwt.event.dom.client.KeyPressEvent; 
import com.google.gwt.event.dom.client.KeyPressHandler; 

/** 
* Entry point classes define <code>onModuleLoad()</code>. 
*/ 
public class Rpctest implements EntryPoint { 

    final TextBox firstName = new TextBox(); 
    final TextBox lastName = new TextBox(); 
    final Button ans = new Button("Add User"); 
    //final Label label1 = new Label("First Name"); 
    //final Label label2 = new Label("Last Name"); 
    private FlexTable userFlexTable = new FlexTable(); 
    //final Label errorLabel = new Label(); 

    private VerticalPanel mainpanel = new VerticalPanel(); 
    private HorizontalPanel addpanel1 = new HorizontalPanel(); 
    private HorizontalPanel addpanel2 = new HorizontalPanel(); 
    private final RpctestServiceAsync calNumbers = GWT 
      .create(RpctestService.class); 

    /** 
    * This is the entry point method. 
    */ 
    public void onModuleLoad() { 

     userFlexTable.setText(0, 0, "User ID"); 
     userFlexTable.setText(0, 1, "First Name"); 
     userFlexTable.setText(0, 2, "Second Name"); 
     userFlexTable.setText(0, 3, "Remove"); 

     //add input boxes to panel 
     addpanel1.add(firstName); 
     addpanel1.add(lastName); 

     firstName.setFocus(true); 

     //add input 
     mainpanel.add(userFlexTable); 
     mainpanel.add(addpanel1); 
     addpanel1.add(ans); 

     ans.addClickHandler(new ClickHandler() { 
      @Override 
      public void onClick(ClickEvent event) { 
         addStock();     
      } 
     }); 

     lastName.addKeyPressHandler(new KeyPressHandler() { 
       public void onKeyPress(KeyPressEvent event) { 
        if (event.getCharCode() == KeyCodes.KEY_ENTER) { 
         addStock(); 
        } 
       } 
       }); 

     RootPanel.get().add(mainpanel); 
    } 

private void addStock(){ 

     String name1 = firstName.getValue(); 
     // Stock code must be between 1 and 10 chars that are numbers, letters, or dots. 
     /*if (!name1.matches("^[0-9A-Z\\.]{1,10}$")) { 
      Window.alert("'" + name1 + "' is not a valid name."); 
      firstName.selectAll(); 
      return; 
     }*/ 
     firstName.setValue(""); 

     String name2 = lastName.getValue(); 
     /*if (!name2.matches("^[0-9A-Z\\.]{1,10}$")) { 
       Window.alert("'" + name1 + "' is not a valid name."); 
       lastName.selectAll(); 
       return; 
      }*/ 
     lastName.setValue(""); 
     firstName.setFocus(true); 

     calNumbers.addUser(name1,name2, 
      new AsyncCallback<String>() { 
      public void onFailure(Throwable caught) { 
       // Show the RPC error message to the user 
        Window.alert("check your inputs"); 
       } 

      @Override 
      public void onSuccess(String result) { 
      // TODO Auto-generated method stub 
       // Add the user to the table. 
       int row = userFlexTable.getRowCount(); 
       userFlexTable.setText(row, 1, result); 
      } 
     }); 

      calNumbers.getUser(new AsyncCallback< ArrayList<User>>() { 
       public void onFailure(Throwable caught) { 
        // Show the RPC error message to the user 
         Window.alert("Problem in database connection"); 
        } 

       @Override 
       public void onSuccess(ArrayList<User> result) { 
        // TODO Auto-generated method stub 



       } 
      }); 

    } 
} 

サービス実装

されるサービスインターフェース

サービスインターフェース

package rpctest.client; 

import java.util.ArrayList; 

import hibDomain.User; 

import com.google.gwt.user.client.rpc.RemoteService; 
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; 

@RemoteServiceRelativePath("testService") 
public interface RpctestService extends RemoteService { 

public String addUser(String firstName,String lastName) throws 
llegalArgumentException; 
    public ArrayList<User> getUser(); 
} 

------------------------------------- 


    package rpctest.client; 

import java.util.ArrayList; 

import hibDomain.User; 

import com.google.gwt.user.client.rpc.AsyncCallback; 

public interface RpctestServiceAsync { 

    void addUser(String firstName, String lastName, 
      AsyncCallback<String> callback); 

    void getUser(AsyncCallback<ArrayList<User>> asyncCallback); 

} 

あります

package rpctest.server; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.google.gwt.user.server.rpc.RemoteServiceServlet; //import com.hib.HibernateUtil; import org.hibernate.Session; import org.hibernate.Transaction; import hibDomain.User; import rpctest.client.RpctestService; public class RpctestServiceImpl extends RemoteServiceServlet implements RpctestService { public String addUser(String name1, String name2) throws IllegalArgumentException { Transaction trns = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { trns = session.beginTransaction(); User user = new User(); user.setFirstName(name1); user.setLastName(name2); session.save(user); session.getTransaction().commit(); } catch (RuntimeException e) { if(trns != null){ trns.rollback(); } e.printStackTrace(); } finally{ session.flush(); session.close(); } return name1+name2; // to test flextable entris only } @Override public ArrayList<User> getUser() { List<User> getUser = null; Transaction trns = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { trns = session.beginTransaction(); getUser = session.createQuery("from User").list(); /* for (Iterator<User> iter = users.iterator(); iter.hasNext();) { User user = iter.next(); User[] arrOfObjects = new User[]{user}; } */ trns.commit(); } catch (RuntimeException e) { if(trns != null){ trns.rollback(); } e.printStackTrace(); } finally{ session.flush(); session.close(); } return (ArrayList<User>) getUser; } } 

サービス実装クラスのgetUserメソッドがエラーを表示しています。戻り値の型、つまりArrayListを強調表示していますが、eclipseでは提案がありません。

答えて

0

クライアントページで、作成したサービスへの非同期呼び出しを作成します。このリンクはあなたを助けるでしょう: http://examples.roughian.com/index.htm#Tutorials~RPC_To_Java

EDIT:

私の謝罪。

  1. 「ユーザー」クラスをシリアル化していることを前提としています。そうでない場合は、シリアル化する必要があります:

    class user implements java.io.serializable;

  2. あなたはリストがnullで、結果リストがnullでない場合、配列に変換し、ユーザーに割り当てた場合の結果セットは、配列に変換するチェックを行いたい場合は[]のように:

    試し{

    ....

    .... ....();

    場合(users.isEmpty(){

    のgetUser = users.toArray();

    }!

    }

    、その後、あなたはクライアント側にgetUserメソッドを返すことができます。

+0

アショク、親切にも最初にこのメソッドを参照してください。ここでやりたいことを理解してもらいたいですが、これは不完全です。保全。私はユーザー型の配列をユーザー型の配列に代入する必要があり、それを返すことができます。私はそれに困難を抱えています。 Plz第一参照してください。私はこのメソッドへの非同期呼び出しを行うためにクライアントページ上のものを処理できることを願っています。 – enterprize

+0

こんにちはエンタープライズ、編集された答えを確認してください。これはあなたが探しているものですか? – Ashok

+0

アショク非常にありがとうございます。私はあなたが言及したのとほぼ同じことをしています。しかし、まだいくつかの問題があります。私はサービス実装部分を編集しました、あなたはそれを見ることができますか? – enterprize

関連する問題