2014-06-12 58 views
1

是否有可能訪問struts.xml文件中的java內部類?例如,我有以下Java類與嵌套類:訪問struts.xml中的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的碼頭 - 插件:6.0.1:運行(d EFAULT-CLI)FOO項目-網站:失敗:StrutsException:無法加載配置 配給。 Action class [foo.action.FooServiceAction.ProductAction] not found - > [Help 1]

如何讓嵌套的java類對struts.xml文件可見?

很多感謝

+0

待辦事項不是嵌套行動類。這真的很糟糕。使用'extend'來整合功能並減少冗餘(DRY) –

+0

謝謝您的回答Andrea。有沒有解釋爲什麼嵌套不是Action類的好習慣? –

+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();