当我调用动作时调用serveResource

时间:2013-05-02 20:48:57

标签: jquery java-ee tomcat liferay portlet

我使用jQuery.ajax在我的portlet中调用此方法:

 serveResource(ResourceRequest request, ResourceResponse response) 

问题是,当我尝试调用任何操作(ActionRequest req,ActionResponse resp)或提交按钮时,只会调用 serveResource

要调用我在jsp中使用的serveResource:

 <portlet:resourceURL  var="ajaxURL" >
        <portlet:param name="jsp" value="<%=request.getPathInfo()%>" />
 </portlet:resourceURL>

当我调用其他操作方法时,为什么只调用此方法。

编辑:

我的控制器代码:

public class ConseillerPorlet extends MVCPortlet {

public void addConsultant(ActionRequest request,ActionResponse response){
    List<String> errors=new ArrayList<String>();
        ConseillerLocalServiceUtil.addConseiller(request, response);

            SessionErrors.add(request, "error-saving-consultant");
            }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    } 
@Override
     public void serveResource(ResourceRequest request, ResourceResponse response) throws IOException, PortletException {
    String jsp=ParamUtil.getString(request, "jsp");
    System.out.println("ServeResouce Called by "+jsp);
    if(jsp.equals("/html/view.jsp")){
        String s="";
        List<Classe> classes;
        long Id=ParamUtil.getLong(request, "id");
        try {
            classes=Utils.getListClasses(etablissementId);
            for(Classe classe : classes)
            {
            s=s+"<option  value='"+classe.getClasseId()+"'>"+classe.getNomClasse()+"</option>";
            }
        } catch (SystemException e) {
            e.printStackTrace();
        }   
                response.getWriter().write(s);//return options for my <select> that i get using ajax and jquery  
    }
}

}

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

这是因为你正在创建一个资源URL,这样做总是会点击serveResource方法。如果您想点击操作方法,则需要创建操作URL。

<portlet:actionURL name="updateSomething" var="updateSomethingURL" />

然后在你的portlet类中你可以定义:

public void updateSomething(ActionRequest actionRequest, ActionResponse actionResponse)
    throws Exception {

    // Code goes here.
}

请注意,如果您要扩展Liferay name类,则<portlet:actionURL />的{​​{1}}属性对应于上面的方法名称。

答案 1 :(得分:0)

同意@ rp解决方案...... 你也可以尝试这个 -

liferay-portlet:actionURL name =“updateSomething”var =“updateSomethingURL”

HTH

答案 2 :(得分:0)

我与id有冲突,因为我在两个portlet中使用了相同的javascript ajax函数而没有使用
<portlet:namespace />