2010-12-09 22 views
0

我想做什麼它容易:Struts2 - 我可以做到這一點,或者它是一個框架限制?

我有一個菜單被加載考慮到一些變量的值。讓我告訴我們的代碼:

<s:div cssClass="menu_table" id="loginContent"> 
    <c:choose> 
     <c:when test="${not action.loggedOn}"> 
      <s:form action="checkLogin" theme="simple"> 
       <span id="err" class="menu_err"> 
        <s:property value="error" /> 
       </span> 
       <s:textfield name="nickname" /> 
       <s:password name="password" /> 
       <span class="menu_span"> 
        <sj:submit targets="loginContent" value="Login" /> 
       </span> 
      </s:form> 
     </c:when> 
     <c:when test="${action.loggedOn}"> 
      <s:form action="checkLogout" theme="simple"> 
       <s:label cssClass="menu_title" value="Ciao #{nickname}" /> 
       <span class="menu_span"> 
        <sj:submit targets="loginContent" value="Logout" /> 
       </span> 
      </s:form> 
     </c:when> 
    </c:choose> 
</s:div> 

的行爲是很容易的:如果action.loggedOn是真的,我加載代碼的一部分,否則另一個。當我加載每個或另一個時,我可以做一個AJAX調用(通過使用JQuery支持)到服務器,即更改錯誤變量的值(是一個字符串)和值的loggedOn(這是布爾)。

我想知道(通過使用這個框架)是否可能直接執行服務器上的這部分代碼並重新加載到客戶端上? (用更少的話來說,我的意思是:是否有可能執行jsp頁面服務器端(對於標準請求,但這次是使用ajax),並且僅向客戶端呈現一小部分代碼)

或者想)我需要創建客戶端函數並重新繪製我的div(使用JSON變量,例如,或其他Jquery函數),因爲ajax調用後的字符串結果?

使用JSF和其他框架的第一個選項是可能的。我可以使用Struts來做到這一點嗎?希望我的問題是明確的:)

只是好奇心。

感謝

回答

1

我覺得最徹底的方法是創建一個新的方法只返回菜單部分的jsp的控制器(如您在問題中顯示的那個)。您可以在Ajax調用,然後在新的JSP的你的菜單容器裝入:

$.ajax({ 
    url: 'yourUrl', 
    success: function(html){ 
     $('#menuContainer').html(html); }, 
    error: function() { 
     alert('There was an error!'); } 
    }); 

JSP總是在服務器中執行,而JavaScript是在客戶端執行。但是你可以在控制器中創建幾個方法,它只能渲染整個頁面的一部分,並用它們只更新一個部分。

編輯:如何發送JSON或HTML在礦井同一控制方法

<action name="HelloWorld" class="vaannila.HelloWorld"> 
    <result name="sendJson" type="json"/> 
    <result name="sendHTML">/url/yourjsp.jsp</result> 
</action> 

,並在你的行動像這樣

public String execute(){ 
    if(json){ 
     return "sendJson"; 
    } 
    if(html){ 
     return "sendHTML"; 
    } 
} 
+0

這東西重新粉刷什麼,他已經在他的職位已經建議 – 2010-12-10 09:24:05

1

按我的知識你問的是不可能的,你必須去重新繪製選項您在您的文章提出什麼

相關問題