Layout liferay多列布局上的struts2 portlet显示已损坏

Layout liferay多列布局上的struts2 portlet显示已损坏,layout,struts2,liferay,portlet,Layout,Struts2,Liferay,Portlet,我有一个struts2 liferay portlet,它在一个列布局页面中工作正常。 在view.jsp(portlet的第一页)中,我有一个struts表单,它映射到goToPrivilege操作 <s:form id="privilegeForm" action="goToPrivilege" namespace="/view"> 在struts.xml中,我使用goToPrivilege重定向到privilegAction <action name="goToPr

我有一个struts2 liferay portlet,它在一个列布局页面中工作正常。 在view.jsp(portlet的第一页)中,我有一个struts表单,它映射到goToPrivilege操作

<s:form id="privilegeForm" action="goToPrivilege" namespace="/view">

在struts.xml中,我使用goToPrivilege重定向到privilegAction

<action name="goToPrivilege" class="defaultAdmin" method="goToPrivilege">
        <result type="redirectAction">
            <param name="actionName">privilegeAction</param>
            <param name="needAssessmentId">${needAssessmentId}</param>
        </result>
</action>
    <action name="privilegeAction" class="privilegeAction">
        <result>/html/needAssessmentAdmin/privilege.jsp</result>
        <result name="error">/html/needAssessmentAdmin/error.jsp</result>
    </action>

特权
${needAssessmentId}
/html/needAssessmentAdmin/privilege.jsp
/html/needAssessmentAdmin/error.jsp
结果是:用户重定向到privilege.jsp页面。它在单列布局中运行良好,但当我将此portlet放在具有两列布局和用户提交表单的页面中时,privilege.jsp的内容显示在页面的按钮中,在portlet区域之外: 如何解决这个问题,使我的portlet像portlet一样工作(在门户中的任何地方使用)

有关详细信息,我使用liferay 5.2.3 Struts2和Spring

编辑: 在view.jsp中,我没有什么特别之处。这只是一种形式。在privilege.jsp中,我有一些不可见的div(充当jquery弹出窗口),然后是一个带有jquery网格加载的表

      ...
<portlet:resourceURL var="privilegeurl" >
    <portlet:param name="struts.portlet.action"
        value="/grid/privilegeGrid" />
</portlet:resourceURL>
<portlet:resourceURL var="privilegeediturl">
    <portlet:param name="struts.portlet.action" 
        value="/grid/privilegeEdit"/>
</portlet:resourceURL>
...

         <!-- Add Dialog -->
    <div id="adddialog" title='<%= res.getString("needAssessment.add")%>'>
        <s:form id="addPrivilegeForm">
            <s:hidden id="needAssessmentId" name="needAssessmentId"/>
            <table>
 ...
            </table>
            <s:submit onclick="closeAddDialog();" key="submit" id="submitaddPrivilege" />
        </s:form>
    </div>
    <script type="text/javascript">
...
j.query('#addPrivilegeForm').submit(function(event){
     // fire off the request to actionEditUrl
    j.query.ajax({
        url: "<%=privilegeediturl%>",
        type: "post",
        data: {
            'needAssessmentId':j.query('#needAssessmentId').val(),
            'roleId': j.query('#addRoleId').val(),
            'startDuration': j.query('#addStartDuration').val(),
            'endDuration': j.query('#addEndDuration').val()
        },
        // callback handler that will be called on success
        success: function(response, textStatus, jqXHR){
            j.query('#privilegeGrid').trigger( 'reloadGrid' );
        },
        // callback handler that will be called on error
        error: function(jqXHR, textStatus, errorThrown){
            // log the error to the console
           alert(
                "The following error occured: "+
                textStatus, errorThrown
            );
        }
    });
     // prevent default posting of form
    event.preventDefault();
});
</script>


    <!-- Back Button -->

     <%if(!isPersian){ %>
    <div style="text-align :right;direction: rtl">
    <%}else { %>
    <div style="text-align: left; direction: ltr">
    <%} %>
    <button onclick="goBack();" id="backButton"><%=res.getString("back")%></button>
    <s:form id="backForm" cssStyle="display:none" action="defaultAdminView" namespace="/view">
    </s:form>

    </div>
    <script type="text/javascript">
    function goBack(){
        document.forms["backForm"].submit();
    }
    j.query('#backButton').button();
    </script>

     <%if(isPersian){ %>
    <div style="text-align :right;direction: rtl ">
    <%}else { %>
    <div style="text-align: left;direction: ltr">
    <%} %>
     <button id="addPrivilegeButton"><%=res.getString("needAssessment.add") %></button>
    </div>

    <script type="text/javascript">
    j.query('#addPrivilegeButton').button().click(function(event){
        addPrivilege();
        return false;
    });

    </script> 
    <br/>

    <!-- Privilege grid -->
    <table id="privilegeGrid" style="width: 100%"></table>
    <div id="pager2"></div>
。。。
...
...
...
j、 查询('#addPrivilegeForm')。提交(函数(事件){
//启动对actionEditUrl的请求
j、 query.ajax({
url:“”,
类型:“post”,
数据:{
“needAssessmentId”:j.query(“#needAssessmentId”).val(),
“roleId”:j.query(“#addRoleId”).val(),
“startDuration”:j.query(“#addStartDuration”).val(),
“endDuration”:j.query(“#addEndDuration”).val()
},
//成功时将调用的回调处理程序
成功:函数(响应、文本状态、jqXHR){
j、 查询(“#privilegeGrid”).trigger('reloadGrid');
},
//将在发生错误时调用的回调处理程序
错误:函数(jqXHR、textStatus、errorshown){
//将错误记录到控制台
警觉的(
“发生了以下错误:”+
文本状态,错误抛出
);
}
});
//防止表单的默认过帐
event.preventDefault();
});
函数goBack(){
文件。表格[“背面表格”]。提交();
}
j、 查询(“#backButton”).button();
j、 查询('#addPrivilegeButton')。按钮()。单击(函数(事件){
addPrivilege();
返回false;
});

我用ajax加载这个网格

j.query("#privilegeGrid").jqGrid({
        url:'<%=privilegeurl.toString()%>&' + '&needAssessmentId=' + needId ,
        datatype : "json",
        colNames : [ 
                    ...
                   ],
        colModel : [
                    ...
                   ],
        rowNum : 10,
        rowList : [ 10, 20, 30 ],
        pager : '#pager2',
        sortname : 'id',
        viewrecords : true,
        jsonReader : {
            repeatitems : false,
            id : "0"
        },
        height : '100%',
        width : 900,
        caption : '<%=res.getString("privileges")%>',
        ...

    });

 j.query("#privilegeGrid").jqGrid('navGrid', '#pager2', {edit : false,add : false,del : false});
j.query(“#privilegeGrid”).jqGrid({
url:'&'+'&needAssessmentId='+needId,
数据类型:“json”,
colNames:[
...
],
colModel:[
...
],
rowNum:10,
行列表:[10,20,30],
传呼机:“#第2页”,
sortname:'id',
viewrecords:是的,
jsonReader:{
重复项:false,
id:“0”
},
高度:“100%”,
宽度:900,
标题:'',
...
});
j、 查询(“#privilegeggrid”).jqGrid('navGrid','#pager2',{edit:false,add:false,del:false});

您的HTML格式不正确。默认情况下,Struts2使用
xhtml
主题,这意味着,
标记将为您生成表。您正在将另一个
标记放入由
标记生成的表中。

您的HTML格式不正确。默认情况下,Struts2使用
xhtml
主题,这意味着,
标记将为您生成表。您正在将另一个
标记放入由
标记生成的表中。

同时显示JSP。同时显示JSP。