integreate smartgwt with struts 2 (JSON)

integreate smartgwt with struts 2 (JSON)

Postby tomrff » Thu Jan 20, 2011 11:12 am

We have a J2EE project which has struts, spring and hibernate on server-side. We are trying to switch to smartgwt at frond end for better user interface. I searched over the internet and didn't get any luck. So , I tried developing the following login form sample to test the integration between smartgwt with struts 2 action which return JSON result.

1.Step 1 SmartGWT code. login form
Code: Select all

import java.util.ArrayList;
import java.util.Map;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.json.client.JSONObject;
import com.smartgwt.client.data.DSCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.RestDataSource;
import com.smartgwt.client.data.XJSONDataSource;
import com.smartgwt.client.types.DSDataFormat;
import com.smartgwt.client.types.DSProtocol;
import com.smartgwt.client.types.FieldType;
import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.util.JSON;
import com.smartgwt.client.util.SC;
      import com.smartgwt.client.widgets.Canvas;
      import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
      import com.smartgwt.client.widgets.events.ClickEvent;
      import com.smartgwt.client.widgets.events.ClickHandler;
      import com.smartgwt.client.widgets.form.DynamicForm;
      import com.smartgwt.client.widgets.form.fields.FormItem;
      import com.smartgwt.client.widgets.form.fields.PasswordItem;
      import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

      public class Smartgwt3 implements EntryPoint {

          TitleOrientation titleOrientation = TitleOrientation.LEFT;
           
          public void onModuleLoad() {
              VLayout layout = new VLayout();
             
              final DynamicForm form = new DynamicForm();
              form.setWidth(250);
        final LoginDS json = new LoginDS();
           
         
              form.setDataSource(json);
              form.setUseAllDataSourceFields(true);
              form.setAutoFetchData(false);
                           IButton swapButton = new IButton("Login");
               final  Label error=new Label();
               error.setVisible(false);
              
              swapButton.setLeft(700);
                       swapButton.addClickHandler(new ClickHandler() {
                  public void onClick(ClickEvent event) {
                 
                 
                              form.submit(new DSCallback(){
                  public void execute(DSResponse response,
                        Object rawData, DSRequest request) {
                                          
                                                              
                                                         if(error.isVisible()) error.setVisible(false);
                                             if(json.getSUC().equals("false"))
                        {
                        error.setContents(json.getMessage());
                        error.setVisible(true);
                        }
                                        
                        
                     
                     
                                    }
         
                    });
                  }
              });
             layout.addMember(form);
              layout.addMember(swapButton);
              layout.addMember(error);
              layout.draw();
          }

      }



Dataresouce code
Code: Select all
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.RestDataSource;
import com.smartgwt.client.data.XJSONDataSource;
import com.smartgwt.client.types.DSDataFormat;
import com.smartgwt.client.types.DSProtocol;
import com.smartgwt.client.types.FieldType;

public class LoginDS extends  DataSource
{
String sfi,message;
public LoginDS()
{
     setDataFormat(DSDataFormat.JSON);
     setDataURL("/myproject/Login.action");
     
     DataSourceField idField = new  DataSourceField("name",FieldType.TEXT,"Name",50,true);
     idField.setValueXPath("name");
     DataSourceField passField = new  DataSourceField("password",FieldType.PASSWORD,"Password",50,true);
     passField.setValueXPath("password");
       setFields(idField,passField);

}
public String getSUC()
{
         return sfi;
}
public String getMessage()
{
      return message;
}
@Override    
protected void transformResponse(DSResponse response,
            DSRequest request,
            Object data)
     {
      
      sfi=response.getData()[0].getAttribute("success");
      message = response.getData()[0].getAttribute("message");
   
     }
}



2. Struts 2 action configure in struts.xml

Code: Select all
  <action name="Login" method="login" class="LoginAction">
       <!--   <result name="success" type="chain">LMTAllProjects</result>-->
        <result name="success" type="json"/>
         <result name="error"  type="json"/>
        </action>


3. Struts 2 action in JAVA

Code: Select all
public class LoginAction {
    private boolean success=false;
    private String name, password;

       
       private String message=null;
      public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }



   public String getPassword() {
      return password;
   }

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

    public String login()
    {
   if(loginCheck()) //your code here
          {success=true;    return SUCCESS;}
       else
{message="login failed"
        return ERROR;}
    }


   public boolean isSuccess() {
      return success;
   }

   public void setSuccess(boolean success) {
      this.success = success;
   }

   public String getMessage() {
      return message;
   }

   public void setMessage(String message) {
      this.message = message;
   }

   }


Smartgwt should get message, success in its DSResponse. That is it.
tomrff
 
Posts: 33
Joined: Sat Jan 08, 2011 10:12 pm

Return to SmartGWT

Who is online

Users browsing this forum: No registered users and 0 guests

cron