如何在 Tapestry webapp 中设置 t5/core/datefield 的默认配置

How to set the default configuration for t5/core/datefield back in Tapestry webapp

我发现最新的 Tapestry5-jquery 4.1.2 在其模块 class.

中覆盖了核心日期字段
@Contribute(ModuleManager.class)
    public static void setupComponentsShims(
            MappedConfiguration<String, Object> configuration,
            @Inject @Path("/META-INF/modules/tjq/datefield.js") Resource datefield,
            @Inject @Path("${jquery.assets.root}/vendor/jquery.mousewheel.js") Resource jquerymousewheel,
            @Symbol(JQuerySymbolConstants.ADD_MOUSEWHEEL_EVENT) boolean mouseWheelIncluded) {

        **configuration.add("t5/core/datefield",
        new JavaScriptModuleConfiguration(datefield));**

        if (mouseWheelIncluded)
            configuration.add("vendor/jquerymousewheel",
                    new JavaScriptModuleConfiguration(jquerymousewheel)
                            .dependsOn("jquery"));
    }

我仍然想使用 Tapestry Core 中的默认值。 我怎样才能将它设置回我的网络应用程序中,该应用程序也使用 Tapestry5-jquery 库?现在我确实修改了 Tapestry-jquery 库代码,但应该有更简单的方法而不是修改外部库代码。

谢谢。

如您所见,JQueryModule 中的覆盖是通过对 ModuleManager 服务使用 mapped configuration 完成的。

与其他贡献一样,您可以使用 configuration.override(...) 覆盖此贡献,即:

@Contribute(ModuleManager.class)
public void useCoreDateField(
        MappedConfiguration<String, Object> configuration,
        AssetSource assetSource)
{
    // Load core javascript for the component
    Resource dateField = assetSource.resourceForPath(
        "/META-INF/modules/t5/core/datefield.js");

    // Override the contribution
    configuration.override("t5/core/datefield",
        new JavaScriptModuleConfiguration(dateField));
}

执行此操作后不要忘记清除浏览器缓存。