Struts2 - 我可以这样做还是框架限制?

时间:2010-12-09 21:59:16

标签: jquery ajax 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为true,我加载一部分代码,否则加载另一部分代码。

现在,当我加载每一个或另一个时,我可以对服务器进行AJAX调用(通过使用JQuery支持),更改错误变量的值(是一个字符串)和loggedOn的值(是boolean)。

我想知道(通过使用这个框架)是否可以在服务器上直接执行这部分代码并在客户端上重新加载? (换言之,我的意思是:是否可以执行jsp页面服务器端(对于标准请求,但这次使用ajax)并且只向客户端呈现一小部分代码)

或者(我认为)我需要创建客户端函数并重新绘制我的div(例如,使用JSON变量,或其他Jquery函数),因为ajax调用后的字符串结果?

使用JSF和其他框架可以实现第一种选择。我也可以用Struts做到这一点吗?希望我的问题很明确:))

只是好奇。

由于

2 个答案:

答案 0 :(得分:1)

根据我的知识,您提出的要求是不可能的,您必须在您的帖子中找到您所建议的重绘选项

答案 1 :(得分:1)

我认为最干净的方法是在控制器中创建一个新方法,只返回菜单部分的jsp(就像你在问题中显示的那个)。您可以进行ajax调用,然后在菜单的容器中加载新的jsp:

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

在客户端执行JavaScript时,始终在服务器中执行JSP。但是你可以在控制器中创建几个方法,它们只能渲染整个页面的一部分,并使用它们只更新一个部分。

编辑:如何在同一控制器方法中发送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";
    }
}