Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Call javaScript native method from servlet

    i am using the method in dynamic form submitForm to call servlet
    and it call servlet and make the response but in client side the native method i called by script doesn't invoked

    this is the class i make the dynamicform and the native javaScript method
    public class UploadImageDialog extends Window{

    private HLayout uploadFormLayout;
    private DynamicFormExt uploadForm;
    private String entityCode;
    private String entityClass;
    private String UNIQUE_CODE = "uniqueCode";
    private AbstractView ownerView;

    public UploadImageDialog(FormItem codeFormItem , AbstractView ownerView) {
    boolean valid = validate(codeFormItem, ownerView);
    if(valid){
    initComplete(this);
    this.entityCode = codeFormItem.getValue().toString();
    this.entityClass = ownerView.getEntityMetaData().getVoClassName();
    this.ownerView = ownerView;
    init();
    show();
    }
    }
    private boolean validate (FormItem codeFormItem , AbstractView owner) {
    StringBuilder errorMessage = new StringBuilder();
    boolean check = true;
    if(codeFormItem==null || codeFormItem.getValue()==null){
    errorMessage.append( "Error in UploadImageDialog in code field");
    check = false;
    }
    if(owner==null){
    errorMessage.append( "Error in AbstractView = null");
    check = false;
    }else{
    if(owner.getEntityMetaData() == null){
    errorMessage.append( "Error in entityMetaData = null");
    check = false;
    }else if (owner.getEntityMetaData().getVoClassName() == null){
    errorMessage.append( "Error in entityMetaData voClass = null");
    check = false;
    }
    }

    //.......
    if(!check){
    ErrorHandlingUtil.handleError(null, null, DSResponse.STATUS_FAILURE, "", "Error on creating image dialog", errorMessage.toString());
    }
    return check;
    }
    private void init(){
    // ==layout
    uploadFormLayout = new HLayout(2);
    uploadFormLayout.setMargin(3);
    uploadFormLayout.setPadding(3);
    // ==window
    this.setMargin(4);
    this.setPadding(3);
    this.setHeight(130);
    if(ownerView instanceof Canvas){
    this.setParentElement((Canvas)ownerView);
    }
    this.setWidth(500);
    this.setTitle("Upload Image");
    this.setCanDrag(false);
    this.setCanDragReposition(true);
    this.setShowCloseButton(true);
    this.setShowMinimizeButton(false);
    this.setAutoCenter(true);
    this.addItem(uploadFormLayout);
    // ==form
    uploadForm = new DynamicFormExt();
    //uploadForm.add
    uploadForm.setWidth100();
    uploadForm.setHeight100();
    uploadForm.setIsGroup(true);
    uploadForm.setMargin(2);
    uploadForm.setPadding(2);
    uploadForm.setGroupTitle("Upload Image");
    uploadForm.setAutoFetchData(false);
    uploadForm.setCanSubmit(true);
    uploadForm.setAction(GWT.getModuleBaseURL() + "uploadImage");
    uploadForm.setEncoding(Encoding.MULTIPART);
    uploadForm.addFetchDataHandler(new FetchDataHandler() {

    @Override
    public void onFilterData(FetchDataEvent event) {
    event.getX();
    }
    });
    uploadForm.addSubmitValuesHandler(new SubmitValuesHandler() {

    @Override
    public void onSubmitValues(SubmitValuesEvent event) {
    event.getValues();
    }
    });
    NamedFrame servletTarget = new NamedFrame("hidden_frame");
    servletTarget.addLoadHandler(new LoadHandler() {

    @Override
    public void onLoad(LoadEvent event) {
    //event.getNativeEvent().getType();
    }
    });
    servletTarget.setSize("1px", "1px");
    servletTarget.setVisible(false);
    uploadForm.setTarget("hidden_frame");

    final UploadItem image = new UploadItem("Image", "Image");
    image.setWidth(400);
    image.setRequired(true);

    HiddenItem entityCode = new HiddenItem(ImageDataSource.ENTITY_CODE);
    entityCode.setValue(this.entityCode);
    entityCode.setVisible(true);

    HiddenItem entityClass = new HiddenItem(ImageDataSource.ENTITY_CLASS);
    entityClass.setValue(this.entityClass);
    entityClass.setVisible(true);

    HiddenItem uniqueCode = new HiddenItem(UNIQUE_CODE);
    entityClass.setValue(this.entityClass);
    entityClass.setVisible(true);

    //image.add
    Button uploadButton = new Button("Upload");
    uploadButton.addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
    uploadAction();
    }
    });
    uploadForm.setTarget("hidden_frame");
    uploadForm.setFields(entityCode , entityClass , uniqueCode, image);
    uploadFormLayout.addMember(servletTarget);
    uploadFormLayout.addMember(uploadForm);
    uploadFormLayout.addMember(uploadButton);
    }

    private native void initComplete(UploadImageDialog upload) /*-{
    $wnd.uploadComplete = function (status) {
    upload.@com.emeint.server.core.admin.client.image.view.UploadImageDialog::uploadComplete(Ljava/lang/String;)(status);
    };
    }-*/;

    public void uploadComplete(String status) {
    if(status.equals("complete")){
    SC.clearPrompt();
    destroy();
    ownerView.refreshAction();
    }else{
    SC.clearPrompt();
    destroy();
    ownerView.refreshAction();
    ErrorHandlingUtil.handleError(null, null, DSResponse.STATUS_FAILURE, "",status , "Error On saving Image");
    }
    }


    private void uploadAction() {
    boolean validate = uploadForm.validate();
    if (validate) {
    final String uniqueCode = new Date() + "-" + entityCode +"-" + entityClass +"-" +AdminSecurityManager.getInstance().getClientSessionVO().getKey();
    uploadForm.getField(UNIQUE_CODE).setValue(uniqueCode);
    uploadForm.submitForm();
    //SC.showPrompt("Loading", "Please Wait While processing ...");
    //RPCRequest req = isFinishProcessReQ(uniqueCode);
    //sendReQ(req , 100);
    } else {
    return;
    }
    }

    }


    this is the servlet
    public class ImageFileUploadServlet extends ServletWithSpringContext {

    private static final long serialVersionUID = 1L;
    private int maxFileSize = 50 * 1024 * 1024;
    private int maxMemSize = 4 * 1024 * 1024;
    private boolean isMultipart;

    private static final String IMAGE_SERVICE = "imageDSRestservice";
    private DSRestEntityServiceAdapter<VOIdentifiable, DSModifyRequestWrapper<VOIdentifiable>, HQLCriteriaFilter> imageService;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
    isMultipart = ServletFileUpload.isMultipartContent(req);
    if (!isMultipart) {
    // throw exception.
    }
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // maximum size that will be stored in memory
    factory.setSizeThreshold(maxMemSize);

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // maximum file size to be uploaded.
    upload.setSizeMax(maxFileSize);

    try {
    // Parse the request to get file items.
    List fileItems = upload.parseRequest(req);

    // Process the uploaded file items
    Iterator i = fileItems.iterator();
    ImageVO imageVO = new ImageVO();
    while (i.hasNext()) {
    FileItem fi = (FileItem) i.next();
    if (!fi.isFormField()) {
    imageVO.setFileName(fi.getName());
    byte[] data = fi.get();
    imageVO.setData(data);
    imageVO.setFileType(FileTypeEnum.IMAGE);
    }else{
    String fieldName = fi.getFieldName();
    if(fieldName.equals("entityCode")){
    imageVO.setEntityCode(fi.getString());
    }else if(fieldName.equals("entityClass")){
    imageVO.setEntityClass(fi.getString());
    }
    }
    }
    DSModifyRequestWrapper request = new DSModifyRequestWrapper<VOIdentifiable>();
    request.setData(imageVO);
    request.setOperationType(DSOperationTypeWrapper.add);
    imageService = (DSRestEntityServiceAdapter) getWebApplicationContext().getBean(IMAGE_SERVICE);
    DRResponseHolder drResponseHolder= imageService.modify(request);
    String responseMessage = "completed";
    if(drResponseHolder.getResponse().getStatus() == DSResponse.STATUS_FAILURE){
    responseMessage = drResponseHolder.getResponse().getMessage();
    }
    response.getWriter();
    response.setContentType("text/html");
    response.setHeader("Pragma", "No-cache");
    response.setDateHeader("Expires", 0);
    response.setHeader("Cache-Control", "no-cache");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<body>");
    out.println("<script type=\"text/javascript\">");
    out.println("parent.uploadComplete('" + responseMessage +"')");
    out.println("</script>");
    out.println("</body>");
    out.println("</html>");
    out.flush();

    } catch (Exception ex) {
    System.out.println(ex);
    } finally {
    //response.setStatus(HttpServletResponse.SC_NO_CONTENT);
    }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
    }

    }
Working...
X