0

我有一个带有模式struts 2 jquery 对话框的主页,该对话框调用包含 struts 表单的 struts2 操作。

主页对话框代码

<s:url id="newItemURL" var="newItemURL" action="addNewItem" />
<sj:dialog id="newItem" href="%{newItemURL}" title="Create New Item" width="700" position="top" autoOpen="false"
                        loadingText="Loading..." />
<sj:a id="addNewItem" openDialog="newItem" button="true" buttonIcon="ui-icon-refresh">New Item</sj:a>

addNewItem Action Result JSP
如果成功,此表单提交并生成文本结果。

   <div id="newItemForm">
        <s:form action="addNewItem" id="addNewItem">
            <fieldset>
            <legend>Create a new item</legend>
            <label for="description">Description: </label>
                <s:textarea id="description" name="item.description" label="Description:" cols="20" rows="5"/><br />
                <sj:submit id="submitNewItem" targets="resultNewItem" value="Submit" indicator="indicator" button="true" replaceTarget="true" />
            </fieldset> 
        </s:form>
    </div>
    <div id="resultNewItem"></div>

addNewItem 表单可以单独使用<sj:head />,AJAX 结果显示在 resultNewItem div 中。<sj:head />必须在 addNewItem JSP 中删除以避免与主页冲突。

问题是当 addNewItem Action 在提交表单时包含在对话框中时,调用了主页操作,因此我最终在对话框中找到了另一个主页。

我该如何解决这个问题?

编辑:

Struts 配置

    <action name="homepage"
        class="com.actions.Homepage">
        <result name="success" type="tiles">Homepage</result>
    </action>

    <action name="AddNewItem" class='com.actions.AddNewItem'> 
        <result name="success">/WEB-INF/jsp/addNewRisk/addNewRisk.jsp</result>
    </action>

    <action name="smoAddNewRiskINSERT" class="com.actions.AddNewItem" method="addNewRisk"> 
        <result name="success">/WEB-INF/jsp/addNewRisk/success.jsp</result>
        <result name="error">/WEB-INF/jsp/addNewRisk/error.jsp</result>
    </action>

我想要实现的 用户单击按钮加载对话框,创建 addNewItem 表单(AddNewItem 操作),当用户提交表单时,它通过 AJAX 提交按钮发送,结果显示在对话框中。

4

1 回答 1

0

首先,为您的元素提供唯一的 id-s。正如昆西评论中指出的那样。其次,在您的 struts.xml 文件中将操作名称更改为addNewItem而不是AddNewItem.

于 2012-12-04T13:25:11.223 回答