2010-12-09 50 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

按我的知识你问的是不可能的,你必须去重新绘制选项您在您的文章提出什么

相关问题