Moqui 中自定义组件的单独 webapp

Separate webapp for custom components in Moqui

我在很多地方都读过这篇文章"You will eventually want to create your own runtime directory and keep it in your own source repository..."。谁能告诉我该怎么做?如果我不想丢失一些 OOTB 组件怎么办?

目前我正计划为定制开发的组件开发一个单独的网络应用程序。比方说,我想为 OOTB 组件设置 "ootb" 挂载点,为自定义开发的组件设置空白“”挂载点。我该怎么做?这是我尝试过但没有成功的方法:

<webapp-list>
    <webapp name="webroot" http-port="8080" https-enabled="false">
        <root-screen host=".*/ootb" location="component://webroot/screen/webroot.xml"/>
    </webapp>
    <webapp name="customroot" http-port="8080" https-enabled="false">
        <root-screen host=".*" location="component://customroot/screen/customroot.xml"/>
    </webapp>
</webapp-list>

如果这不起作用,那么我能想到的另一种解决方案是只包含 "customroot" 条目,并在其中添加 "webroot" 作为 SubScreenItem。 "customroot" 屏幕将只是空白,我的自定义装饰器将出现在 "customapps" 屏幕中,这将是 "apps" 屏幕的对应部分。我所有的屏幕都将使用 "customapps" 屏幕。

虽然我没有尝试过我上面写的东西,但不知何故感觉像是一个 hack。我相信应该有更好的方法来做到这一点。

是的,我已经阅读了 article,我想使用 localhost,应该也有一些方法可以使用 localhost。

正如您链接到的另一个 Whosebug 问题中所解释的(在 "article" 一词上),运行时使用的 webapp 元素是根据 "moqui-name" 来自 web.xml 的上下文参数选择的] 文件(在 WAR 文件中或之外)。除非您要部署多个 WAR 文件或其他形式的网络应用程序,否则这没有用。

您所描述的内容可以通过在屏幕层次结构中的所需位置添加子屏幕来处理。 Moqui 中屏幕层次结构的一般想法是,您可以通过各种方式安装 "applications" 的根屏幕(有关 3 种方法的详细信息,请参阅子屏幕元素上的注释或使用 Moqui 制作应用程序一书) ).这样做的部分目的是避免在 servlet 容器中安装多个 web 应用程序,因为这会使事情变得更加复杂,包括:处理 authc 和会话、配置和部署等。

通常对于组件中的应用程序,您需要使用数据库记录将子屏幕添加到层次结构中的现有屏幕,主要来自 "webroot" 组件。这是 Moqui 示例应用程序中的一个示例(这在 "apps" 路径元素下添加了一个 "example" 路径元素,其中 apps.xml 屏幕安装在根屏幕下,将它在 /apps/example):

<moqui.screen.SubscreensItem screenLocation="component://webroot/screen/webroot/apps.xml"
        subscreenName="example" userGroupId="ALL_USERS" menuTitle="Example" menuIndex="8" menuInclude="Y"
        subscreenLocation="component://example/screen/ExampleApp.xml"/>

这是 PopCommerce 的一个示例,用于将应用程序的根屏幕安装在根屏幕而不是 "apps" 屏幕下(即使其位于 /popc 而不是 /apps/popc;请注意这意味着 apps.xml 屏幕中的装饰将不会被使用,因为它不在渲染路径中):

<moqui.screen.SubscreensItem screenLocation="component://webroot/screen/webroot.xml"
        subscreenName="popc" userGroupId="ALL_USERS" menuTitle="POP Commerce" menuIndex="9" menuInclude="N"
        subscreenLocation="component://PopCommerce/screen/PopCommerceRoot.xml"/>

我想我可能问了一个令人困惑的问题,但感谢你抽出时间大卫。如果我尝试改写我的问题,它将是:"How to have a decorator screen which will not use any HTML from the webroot or apps screens?"

我想我找到了答案。我刚刚将我的 customroot 屏幕添加为 webroot 屏幕下的 SubScreenItem,并在其中提到了属性 standalone="true"。现在我的 URL: localhost:8080/customroot/foo 没有使用 webroot 或应用程序屏幕中提到的任何内容。

仅此而已,现在如果我想让我的所有组件都处于 URL 中的根级别,例如:localhost:8080/foo 我认为唯一的方法是将 OOTB 组件转移到其他一些 URL,例如:localhost:8080/ootb/apps/AppList 为此,我必须将 webroot 添加为 customroot 屏幕的 SubScreenItem,并将 webroot 的 webapp 条目替换为 customroot 的条目。

妈的,我努力了,还是一头雾水