struts2 - Struts 2 Ajax url 和 div 标签无法与 struts 文件标签一起使用

标签 struts2 dojo

在 Jsp 页面上,我根据之前使用的 struts 2 url 和 struts dojo 标记 div 的列表选择来检索列表

<s:url id="d_url" action="employDivisionAction"/>
<sx:div showLoadingText="false"  id="details1" href="%{d_url}"  theme="ajax"      listenTopics="show_division" onchange="show_Department()" formId="frm_demo"/>

在js文件中调用这个函数

function show_Department()
{
   dojo.event.topic.publish("show_department");
}

一切正常,我可以检索列表,但当我尝试使用时出现问题

<s:file/> 
jsp中的

标签。当我包含上述标签时,ajax 功能停止工作。 任何知道为什么它不起作用的任何指导都会有所帮助。

完整的jsp代码

<s:form name="employee" action="AddEmployee" method="POST" theme="css_xhtml" enctype="multipart/form-data" id="frm_demo" >

       <table align="center" cellspacing="10px">
                      <tr>


                 <td align="left">  <s:text name="global.empno"/> </td>
                 <td align="left">  <s:textfield name="employeeNo" value="%{employee.employeeNo}"  onkeypress="return inputLimiter(event,'NameCharactersAndNumbers')"/> </td>
                 <td align="left"> <s:text name="global.fnm"/> </td>
                <td align="left"> <s:textfield name="firstName" value="%{employee.firstName}" onkeypress="return inputLimiter(event,'NameCharacters')"/> </td>
                     </tr>
                <tr>
                    <td><s:file name="Image"/></td>
                </tr>    


                <tr>
                    <td align="left"> <s:text name="Company"/> </td>

                    <td align="left"><s:select name="currentCompany" id="companyList" headerKey="" headerValue="Select" list="companyList" onchange="show_branch()"/></td>  

                    <td align="left"> <s:text name="Branch"/> </td>
                    <td align="left">
                    <div ><s:fielderror fieldName="branchName" /></div>
                    <s:url id="d_url" action="employBranchAction"/>
                    <sx:div  showLoadingText="false" name="branchDiv" id="details" href="%{d_url}"  theme="ajax" listenTopics="show_branch" onchange="show_division()" formId="frm_demo"/>
                    </td>


                </tr>

                <tr>
                    <td align="left"> <s:text name="Division"/> </td>
                    <td align="left">
                    <div ><s:fielderror fieldName="divisionName" /></div>
                    <s:url id="d_url" action="employDivisionAction"/>
                    <sx:div showLoadingText="false"  id="details1" href="%{d_url}"  theme="ajax" listenTopics="show_division" onchange="show_Department()" formId="frm_demo"/>
                    </td>
                    <td align="left"> <s:text name="Department"/> </td>
                    <td align="left">
                    <div><s:fielderror fieldName="departmentName"  /></div>
                    <s:url id="d_url" action="employDepartmentAction"/>
                    <sx:div showLoadingText="false"  id="details2" href="%{d_url}"  theme="ajax" listenTopics="show_department" onchange="show_Section()" formId="frm_demo"/>
                    </td>
                </tr> 

                <tr>
                    <td align="left"> <s:text name="Section"/> </td>
                    <td align="left">
                    <div><s:fielderror fieldName="sectionName"  /></div>
                    <s:url id="d_url" action="employSectionAction"/>
                    <sx:div showLoadingText="false"  id="details3" href="%{d_url}"  theme="ajax" listenTopics="show_section" onchange="show_Unit()" formId="frm_demo"/> 
                    </td>
                    <td align="left"> <s:text name="Unit"/> </td>
                    <td align="left">
                    <div ><s:fielderror fieldName="unitName" /></div>
                    <s:url id="d_url" action="employUnitAction"/>
                    <sx:div showLoadingText="false"  id="details4" href="%{d_url}"  theme="ajax" listenTopics="show_unit" onchange="show_Position()" formId="frm_demo"/>
                    </td>
                </tr>

                <tr>
                    <td align="left"> <s:label value="Position"/> </td> 
                    <td align="left">
                    <div><s:fielderror fieldName="positionName" /></div>
                    <s:url id="d_url" action="employPositionAction"/>
                    <sx:div showLoadingText="false"   id="details5" href="%{d_url}"  theme="ajax" listenTopics="show_position"  formId="frm_demo"/>     
                    </td>

                </tr>

                </table>



                <s:set name="webFramework" value="%{employee.employeeID}"/>
                    <table align="center" cellspacing="20px">
                    <tr> 
                        <s:if test="#webFramework==0">
                        <td align="left"> <s:submit  value="Add" cssClass="buttonSmall" onclick="return validateEmployee();"/> </td>
                        </s:if>
                        <s:if test="#webFramework>0">
                        <td align="left"> <s:submit name="update" cssClass="buttonSmall" value="Update"/> </td>
                        </s:if>

                    </tr>  
                    </table>

                </s:form>

最佳答案

添加<s:file/> (一旦渲染,它就是 <input type="file"/> )到页面,要求表单内容类型为 multipart/form-data而不是默认值(即 application/x-www-form-urlencoded )。

所以您应该添加 enctype="multipart/form-data"您表单的属性;

但是,也就是说,如果您尝试使用 AJAX 上传文件,这是不可能的(根据 this SO answer ,使用 AJAX 的 XHR2 上传最终是可能的。);

最好的办法是在单独的页面/选项卡/表单中管理文件上传,而不是在同一页面/选项卡/表单中管理文件上传。


编辑:你有你的<sx:div /><s:file /> 的相同形式内,它指的是 frm_demo 形式与 formId参数。

根据the documentation 、formId属性指定

whose fields will be serialized and passed as parameters

然后,当您尝试发布 dojo AJAX 请求时,您将尝试序列化所有表单元素,包括 File 元素。 Java 文件不能立即序列化,尤其是使用 AJAX 库时; <s:file /> 并不重要为空或者如果您没有使用它:它与您发布的形式相同,那么它将导致问题;移动<s:file />到另一种形式(即使在同一页面),它会起作用。

最初的解决方案是正确的,现在我们有了解释:)

Doc

P.S: Dojo 使用 XHRPOST 来发送数据,并且无法发送二进制数据(如上所述,您现在可以使用 jQuery 和 XHR2 来做到这一点)。

请注意,自 2.1 起,Dojo 在 Struts 上已被弃用...最新版本建议使用 jQuery 作为 AJAX 库(但没有包含任何内容,因此选择权在您手中)

关于struts2 - Struts 2 Ajax url 和 div 标签无法与 struts 文件标签一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14098154/

相关文章:

java - Struts2 以不同的方式传递数据

尽管代码与教程相同,但 Java Brains struts 2 项目未运行

java - 更改 struts 2 上上传文件的默认错误消息

web-applications - Struts 2 文件上传 - 访问客户端文件名

dojo - Dojo 中有没有办法在 DOM 元素中查找所有小部件后代?

javascript - 给定依赖项列表,如何将 Dojo 构建到单个文件中?

java - Struts2 使用属性标记从 jsp 访问 ActionContext

javascript - 道场 + Highcharts : showAxes property moves the x and y axis

javascript - 当 Dojo 自动完成器的值发生变化时调用 java 脚本函数

javascript - dojo 中饼图和图例的配置