Portlet:actionurl不会在控制器中进行@Actionmapping

时间:2012-06-15 06:53:16

标签: spring liferay portlet liferay-6

我正在使用Liferay portal-6和Spring-3

在我的portlet中,首先它转到没有参数的@Rendermapping并显示默认的jsp, 当我点击一个按钮时,我正在通过actionurl,但它不会转到相应的@Actionmapping

我的searchForm.jsp看起来像这样:

<portlet:actionURL var="showSearchResultsUrl">
    <portlet:param name="myaction" value="searchResults" />
</portlet:actionURL>

<form:form id="searchForm" name="searchForm" commandName="patientStoryForm"    method="POST" action="${showSearchResultsUrl}" enctype="multipart/form-data" >
    <input type="button" name="search_btn" value="Search"/></td>
</form:form>

我的控制器是这样的:

@Controller(value = "searchPatientStoryController")
@RequestMapping(value = "VIEW")
@SessionAttributes(types = PatientStoryForm.class)
public class SearchPatientStoryController {

    @RenderMapping
    public String showSearchForm(RenderResponse response, Model model) {
        return "searchForm";
    }

    @RenderMapping(params = "myaction=searchResultsForm")
    public String showSearchResultsForm(RenderResponse response, Model model) {
        return "searchResultsForm";
    }

    @ActionMapping(params = "myaction=searchResults")
    public void searchResults(
        @ModelAttribute(value = "patientStoryForm") PatientStoryForm patientStoryForm,
        BindingResult bindingResult, ActionResponse response, ActionRequest request,
        SessionStatus sessionStatus, Model model) {

        response.setRenderParameter("myaction", "searchResultsForm");
    }
}

当我点击searchForm.jsp中的按钮时,它应该转到@Actionmapping,但它不会继续。

请帮帮我。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您需要提交表单才能调用相关的操作方法

但是,在jsp代码中,我看到下面的代码表明它只是一个按钮。

<input type="button" name="search_btn" value="Search"/>

要提交表单,您可以执行以下任一方式:

  1. 使用提交按钮代替普通表单按钮,如下所示:

    <input type="submit" name="search_btn" value="Search"/>

  2. 在按钮的点击事件上调用javascript函数并提交表单:

  3. <script type="text/javascript">
        function submitForm(form){
            var actionUrl = '<portlet:actionURL var="showSearchResultsUrl"><portlet:param name="myaction" value="searchResults"/></portlet:actionURL>';
            form.action = actionUrl;
            form.submit();
        }
    </script>
    

    <input type="button" name="search_btn" value="Search" onclick="javascript:submitForm(this.form)"/>

答案 1 :(得分:0)

您可以尝试更换您的actionURL,如下所示

<portlet:actionURL name="searchResults" var="showSearchResultsUrl"> 
        <portlet:param name="myaction" value="searchResults" /> 
</portlet:actionURL>

答案 2 :(得分:0)

您需要设置表单的操作,如下所示:

<form:form action="<%=showSearchResultsUrl%>" id="searchForm" name="searchForm" commandName="patientStoryForm"    method="POST" action="${showSearchResultsUrl}" enctype="multipart/form-data" >
<input type="button" name="search_btn" value="Search"/></td>

这样你的动作名称将是“myaction”,值为“searchResults”作为你在控制器端的映射。