在struts.xml中访问java内部类

时间:2014-06-12 09:48:54

标签: java xml struts2 inner-classes

是否可以访问struts.xml文件中的java内部类?例如,我有以下带有嵌套类的java类:

public class FooServiceAction {

FooServiceImpl service = new FooServiceImpl();

public class ProductAction extends ActionSupport {

    private ProductImpl product = new ProductImpl();

    public ProductAction() {

    }

    public ProductAction(ProductImpl product) {
        this.product = product;
    }

    public ProductImpl getProduct() {
        return product;
    }

    public void setProduct(ProductImpl product) {
        this.product = product;
    }

    public String productSetting() {
        return SUCCESS;
    }

    @Override
    public void validate() {
        if (this.getProduct().getName() == null
                || this.getUser().getName().equals("")) {
            addFieldError("name", "Product name is mandatory.");
        } else {
            service.createProduct(product);
        }
    }
}

我需要访问struts.xml文件中的嵌套ProductAction类。

<action name="createProduct" class="foo.action.FooServiceAction.ProductAction" method="productSetting">
        <result name="success">/launchapp.jsp</result>
        <result name="input">/createUser.jsp</result>
    </action>

每当我尝试使用jetty启动此项目时,都会抛出异常,因为struts.xml无法找到嵌套的java类。

  

[错误]无法执行目标org.mortbay.jetty:maven-jetty-plugin:6.0.1:run(d   项目foo-web上的efault-cli:失败:StrutsException:无法加载配置   配给。找不到动作类[foo.action.FooServiceAction.ProductAction] - &gt; [帮助1]

如何使嵌套的java类对struts.xml文件可见?

非常感谢提前

1 个答案:

答案 0 :(得分:0)

是的,如果你将内部类静态化,它是可能的。请参阅以下代码

public class FooServiceAction {
  public static class ProductAction extends ActionSupport {

使用封闭的类名访问静态嵌套类:

<action name="createProduct" class="foo.action.FooServiceAction.ProductAction" method="productSetting">

Struts将使用ObjectFactory为静态嵌套类创建一个对象,如:

foo.action.FooServiceAction.ProductAction action =
     new foo.action.FooServiceAction.ProductAction();