【问题标题】:How to create a new(original) struts path?如何创建新的(原始)struts 路径?
【发布时间】:2015-04-28 11:05:09
【问题描述】:

我之前尝试过用现有的 struts 路径覆盖现有的 StrutsPortletAction 并成功。但是,如果我要尝试创建自己的 struts 动作路径,我似乎无法这样做。

<hook>
    <custom-jsp-dir>/custom_jsps</custom-jsp-dir>
    <struts-action>
        <struts-action-path>/portal/set_viewers/</struts-action-path>
        <struts-action-impl>com.mine.blogs.hook.BlogEntryViewerStrutsPortletAction</struts-action-impl>
    </struts-action>
</hook>

eclispe IDE 给我这个错误“/portal/set_viewers/”不在可能的值中”,当我继续部署构建的战争时,tomcat 错误为:com.liferay.portal.kernal.util.InstanceFactory can not access a member of class com.mine.blogs.hook.BlogEntryViewerStrutsPortletAction with modifiers ""

尝试使用 struts-action-path as /blogs/set_viewers/ 也失败了。

这是我正在使用的 .java。实际上非常基本。

package com.mine.blogs.hook;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import com.liferay.portal.kernel.struts.StrutsPortletAction;


public class BlogEntryViewerStrutsPortletAction implements StrutsPortletAction {

BlogEntryViewerStrutsPortletAction(){
    super();
}

@Override
public void processAction(
    PortletConfig arg0, ActionRequest arg1, ActionResponse arg2)
    throws Exception {

    // TODO Auto-generated method stub
    System.out.println("process1");

}

@Override
public void processAction(
    StrutsPortletAction arg0, PortletConfig arg1, ActionRequest arg2,
    ActionResponse arg3)
    throws Exception {

    // TODO Auto-generated method stub
    System.out.println("process2");

}

@Override
public String render(
    PortletConfig arg0, RenderRequest arg1, RenderResponse arg2)
    throws Exception {

    // TODO Auto-generated method stub
    System.out.println("render1");
    return null;
}

@Override
public String render(
    StrutsPortletAction arg0, PortletConfig arg1, RenderRequest arg2,
    RenderResponse arg3)
    throws Exception {

    // TODO Auto-generated method stub
    System.out.println("render2");
    return null;
}

@Override
public void serveResource(
    PortletConfig arg0, ResourceRequest arg1, ResourceResponse arg2)
    throws Exception {

    // TODO Auto-generated method stub
    System.out.println("serve1");

}

@Override
public void serveResource(
    StrutsPortletAction arg0, PortletConfig arg1, ResourceRequest arg2,
    ResourceResponse arg3)
    throws Exception {

    // TODO Auto-generated method stub
    System.out.println("serve2");

}
}

以及对应的liferay-hook.xml

<hook>
    <custom-jsp-dir>/custom_jsps</custom-jsp-dir>
    <struts-action>
        <struts-action-path>/blogs_entry/set_viewers/</struts-action-path>
        <struts-action-impl>com.mine.blogs.hook.BlogEntryViewerStrutsPortletAction</struts-action-impl>
    </struts-action>
</hook>

【问题讨论】:

  • 您是否使用 BaseStrutsPortletAction 扩展您的 BlogEntryViewerStrutsPortletAction ?
  • 是的,已经做到了。但我也意识到 IDE 并没有提示我创建覆盖所需的方法,例如 render、processAction 等...
  • 所有方法都不需要重写,BaseStrutsPortletAction 类有方法的基本实现。

标签: liferay liferay-6 struts-1


【解决方案1】:

请尝试将 struts 操作 URL 更改为不以“/portal”开头的内容。 Liferay 可能会为门户级别的操作路径保留“/portal”。

例如,

        <struts-action-path>/blogs_entry/set_viewers/</struts-action-path>

【讨论】:

  • 在尝试使用 /portal 之前,我实际上首先使用了 '/blogs/set_viewers/'
【解决方案2】:

错误是由构造函数引起的。我已将其删除,现在可以正常部署

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2011-02-16
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多