我创建了一个名为RegesterAction
的新类,但我没有在任何包中保留此类。如何在struts.xml
?
以下是struts.xml
文件,但我无法理解属性值"default"
和struts-default
。
<struts>
<package name="default" extends="struts-default">
<action name="*Register" method="{1}" class="RegisterAction">
<result name="populate">/register.jsp</result>
</package>
</struts>
答案 0 :(得分:2)
Struts2中的包与Java中的包略有不同,但用法是将代码分离到与自己的命名空间一起使用的不同模块中,因此它不会与动作名称冲突。为了更好地理解包和命名空间的概念,您可以查看Struts 2 Namespace configuration example and explanation教程。
如果您将类保留在源文件夹中并且它迟早不属于该程序包,那么最终会出现命名新类和繁重代码管理的问题。
Struts2框架包含名为struts-default
的软件包,其中包含了在应用程序配置中使用的所有必要内容,方法是将此名称放入extends
<package
属性中来扩展软件包。 } 标签。您还可以包含其他插件中的其他默认包,即json-default
等。
只要命名空间与包名称相关,您就可以比较Struts2框架中Java语言和包命名空间使用的包名称,您可能会发现它们类似,但它们完全不同。例如,Struts2使用的默认命名空间是""
,在其他包/命名空间中找不到操作或结果名称时使用。如果您使用namespace="/"
(应用程序的包根),这几乎是等效的。
如果省略default
,如何使用root
的{{1}}来命名根包,而不是使用框架已经使用的名称struts-default
。 1}}属性然后将使用默认命名空间。这与Java类似,如果省略包声明,则使用默认包。
概念默认可能会通过其他术语传播,例如,默认操作,默认结果,默认拦截器堆栈等。框架也使用名称默认已知接口的默认实现,等等。默认一词没有单数含义。通常,如果省略代码,框架将使用它的默认设置。
答案 1 :(得分:1)
package name完全独立于您的代码工件。
The struts-default
package is... the Struts 2 default package。它定义了默认结果类型,拦截器,拦截器堆栈和一些其他默认值。你不需要来扩展它,但如果你没有,你需要做大量的手工工作在你自己的包中。
我相信你应该将你的行动类放在一个包中,并且可以认为没有合理的论据反对这样做的最佳实践。同样,您的操作类包完全独立于包名称,或包扩展的内容(如果有)。
答案 2 :(得分:0)
是的,你可以在 struts.xml 中包含这两个......就像这里一样
<package name="default" extends="json-default,hibernate-default" namespace= "/">