1

我正在尝试找出使用 ajax 和 struts2 在我的页面上动态更改某些页面 html 的最佳方法。我有这些标签文件,其中包含需要更改的 html 的 jsp。我想将这些标记文件用于 ajax 调用,而不必将 html 从它们复制到其他来源,也不必担心将数据填充到该 html 中,因为 JSP 已经处理了。

因此,我正在做的是对 jsp 进行 Jquery Ajax 调用,该 jsp 仅包含我想要更新 html 的标记文件,并且在该标记文件中,我正在使用<s:action />标记调用 struts2 操作。我想要的,并且我认为合适的是,如果我可以执行该操作,并且下面的所有 struts2 jsp 标记都将使用来自已执行的该操作类的数据。因此,例如,如果我<s:fielderror />在 jsp 中有标签,则在使用 action 标签执行的操作中添加的字段错误将由该 fielderror 标签呈现在同一个 jsp 中。这是我正在尝试做的一个例子。

有问题的标签文件:

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<%-- This is the action that I want to execute and use for the rest of the jsp in this file --%>
<s:action name="ajaxRegister" namespace="/actions" />

<form id="register_form" action="register/" method="post">
<c:choose>
    <c:when test="${not empty sessionScope.username}">

        <div class="inputs">
            <h1>Create Your Password</h1>
            <label style="padding-bottom: 10px;">Create your password to finish your registration</label>
            <label for="password1">Password:</label>
            <input type="password" name="password1" id="register_pwd_1" data-enter-click="finish_button" />
            <label for="password2">Verify Password:</label>
            <input type="password" name="password2" id="register_pwd_2" data-enter-click="finish_button" />
            <input name="noScript" type="hidden" value="${pageContext.request.servletPath}" data-no-script />
            <div id="register_error" class="response">
                <s:fielderror fieldName="register.error" />
            </div>
            <div class="clear"></div>
        </div>
        <input type="submit" id="finish_button" value="Finish" />

    </c:when>
    <c:otherwise>
        <div class="inputs">
            <h1>Not a member yet? Sign Up!</h1> 

            <input name="uuid" type="text" data-no-script />
            <div id="paste_input"></div>
            <input name="noScript" type="hidden" value="${pageContext.request.servletPath}" data-no-script />

            <div id="register_error" class="response">
                <s:fielderror fieldName="register.error" />
            </div>
        </div>
        <input type="submit" id="register_button" value="Register" />

    </c:otherwise>
</c:choose>
</form>

我的问题是,即使我在这个 jsp 中做的第一件事是调用动作,但 fielderror 标记不会使用动作类中生成的字段错误填充 html。这可能吗?此外,我还无法弄清楚如何将参数作为要在动作类中设置的属性传递。动作类需要使用的参数是用户提交的那个注册表单的值。正是那个提交按钮调用这个jsp来为他们呈现一个响应。但是,如果我无法将这些表单值用于操作,那么就没有意义了。

另外,我没有为此使用 json,因为如果注册过程完成,则需要动态添加页面的全新部分,因此它不仅仅是我返回给用户的简单错误消息。而且我不想在 java 代码或 javascript 甚至其他地方的字符串中包含 html,因为我已经在 J​​SP 中拥有它。

我有正确的想法吗?

4

0 回答 0