2013-08-26 113 views
0

道歉爲啓動另一個線程,但我有點解決了我的第一個線程的問題,但現在我遇到了一個不同的問題。如何在調用它的portlet中嵌入web服務響應?

背景:

我有一個portlet這需要3參數(溫度,FromUnit,ToUnit),並把它們傳遞到設在這裏外部的WebService: http://www.webservicex.net/ConvertTemperature.asmx/ConvertTemp

我不希望portlet實際重定向到webService的URL,唯一的方法就是使用jquery的AJAX,我現在已經做了。 但是我也希望將webService的響應嵌入到我曾經稱之爲的同一個portlet中,這就是我遇到的問題。

這是我到目前爲止,這是我的門戶頁面:

<html> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Demo</title> 
    </head> 
    <body> 


     <script src="http://localhost:8080/my-greeting-portlet/jquery.js"></script> 
     <script type="text/javascript" src="http://localhost:8080/my-greeting-portlet/js/script.js"></script> 



    <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 



    <%@ page import="javax.portlet.PortletPreferences" %> 

    <portlet:defineObjects /> 
    <% 

    PortletPreferences prefs = renderRequest.getPreferences(); 
    String Temperature = (String)prefs.getValue("Temperature","Temperature"); 

    PortletPreferences prefs2 = renderRequest.getPreferences(); 
    String FromUnit = (String)prefs2.getValue("FromUnit", "FromUnit"); 

    PortletPreferences prefs3 = renderRequest.getPreferences(); 
    String ToUnit = (String)prefs3.getValue("ToUnit","ToUnit"); 



    %> 



    <portlet:renderURL var="editGreetingURL"> 

     <portlet:param name="jspPage" value="/edit.jsp" /> 

    </portlet:renderURL> 


    <div id="contact_form"> 
    <form name="callWebService" id="callWebService" action=""> 
    <fieldset> 
     <label for="Temperature" id="Temperature_label">Temperature </label> 
     <input type="text" name="Temperature" id="Temperature" size="30" value="" class="text-input" /> 
     <label class="error" for="Temperature" id="Temperature_error">This field is required.</label> 
     <br /> 

     <label for="FromUnit" id="FromUnit_label">From unit </label> 
     <input type="text" name="FromUnit" id="FromUnit" size="30" value="" class="text-input" /> 
     <label class="error" for="FromUnit" id="FromUnit_error">This field is required.</label> 
     <br /> 

     <label for="ToUnit" id="ToUnit_label">To Unit </label> 
     <input type="text" name="ToUnit" id="ToUnit" size="30" value="" class="text-input" /> 
     <label class="error" for="ToUnit" id="ToUnit_error">This field is required.</label> 

     <br /> 
     <input type="submit" name="submit" class="button" id="submit_btn" value="submit" /> 
     </fieldset> 
    </form> 
    </div> 


    </body> 
    </html> 

這裏是jQuery代碼:

$(function() { 
    $('.error').hide(); 
    $(".button").click(function() { 
    // validate and process form here 
    var dataString = $("#callWebService").serialize(); 
    // alert (dataString);return false; 
    $.ajax({ 
     type: "POST", 
     url: "http://www.webservicex.net/ConvertTemperature.asmx/ConvertTemp", 
     data: $("#callWebService").serialize(), 
     success: function() { 
     $('#contact_form').html("<div id='message'></div>"); 
     $('#message').html("<h2>Contact Form Submitted!</h2>") 
     .append("<p>We will be in touch soon.</p>") 
     .hide() 
     .fadeIn(1500, function() { 
      $('#message').append("<img id='checkmark' src='images/check.png' />"); 
     }); 
     } 
    }); 
    return false; 



    $('.error').hide(); 
     var Temperature = $("#Temperature").val(); 
     if (Temperature == "") { 
     $("#Temperature_error").show(); 
     $("#Temperature").focus(); 
     return false; 
    } 
     var FromUnit = $("input#FromUnit").val(); 
     if (FromUnit == "") { 
     $("label#FromUnit_error").show(); 
     $("input#FromUnit").focus(); 
     return false; 
    } 
     var ToUnit = $("input#ToUnit").val(); 
     if (ToUnit == "") { 
     $("label#ToUnit_error").show(); 
     $("input#ToUnit").focus(); 
     return false; 
    } 

    }); 
}); 

一切似乎是工作,或者至少我是這樣沒有得到錯誤,但似乎這部分代碼被完全忽略:

success: function() { 
      $('#contact_form').html("<div id='message'></div>"); 
      $('#message').html("<h2>Contact Form Submitted!</h2>") 
     .append("<p>We will be in touch soon.</p>") 
      .hide() 
      .fadeIn(1500, function() { 
      $('#message').append("<img id='checkmark' src='images/check.png' />"); 
     }); 

當我按下「提交」對接沒有任何反應。沒有重定向到web服務URL(好),但是上面定義的自定義消息也沒有顯示(壞)。屏幕保持原樣。

當我取消註釋jquery代碼中的「警報」,並且參數肯定是正確拾取的,我假設它們正在傳遞到webService URL,但沒有其他事情發生。

這是因爲webservice URL返回一個覆蓋我的消息或類似的東西的響應?

如何獲取嵌入到portlet中的webService響應?

再一次,很多謝謝你看這個,非常感謝!

+0

我一個 「錯誤」 部分添加到$就操作問題: \t錯誤:函數(XHR,ajaxOptions,thrownError){ \t警報(「服務呼叫失敗!消息:「+ xhr.statusText); ,現在當我點擊提交按鈕的錯誤警告框總是彈出,指出: 「服務呼叫失敗信息:錯誤!」 它看起來像服務呼叫不執行正確呢? – dinealone

回答

相關問題