gpt4 book ai didi

jsf - 如何在 JSF 中加载动态资源?

转载 作者:行者123 更新时间:2023-12-03 21:38:40 28 4
gpt4 key购买 nike

我想使用 h:outputScript 加载动态资源(生成的 JavaScript,技术上以 JSON 配置)作为动态资源。标签。我知道我可以通过编写自己的 servlet 并通过普通标签脚本加载它来做到这一点,因为我更喜欢加载资源的“JSF 方式”。

有可能吗,怎么可能?

最佳答案

是的,这是可能的。您可以通过使用特定的资源库名称和自定义 ResourceHandler 来实现这一点。拦截它并返回一个自定义 Resource 当请求特定库的资源时。

例如。

<h:outputScript library="dynamicJs" name="some.js" />


public class DynamicJsResourceHandler extends ResourceHandlerWrapper {

public DynamicJsResourceHandler(ResourceHandler wrapped) {
super(wrapped);
}

@Override
public Resource createResource(String resourceName, String libraryName) {
if ("dynamicJs".equals(libraryName)) {
return new DynamicJsResource(resourceName);
} else {
return super.createResource(resourceName, libraryName);
}
}

}


public class DynamicJsResource extends Resource {

private String resourceName;

public DynamicJsResource(String resourceName) {
this.resourceName;
}

@Override
public String getRequestPath() {
// TODO: return "/context/javax.faces.resource/" + resourceName + ".xhtml?ln=dynamicJs";
}

@Override
public URL getURL() {
// TODO: return new URL("http://localhost:8080" + getRequestPath());
}

@Override
public Map<String, String> getResponseHeaders() {
// TODO: return desired HTTP response headers.
}

@Override
public InputStream getInputStream() throws IOException {
// TODO: return InputStream by resourceName.
}

@Override
public boolean userAgentNeedsUpdate(FacesContext context) {
// TODO: return true when resource has been modified in server side.
}

}

要使其运行,请在 faces-config.xml 中按如下方式注册它:
<application>
<resource-handler>com.example.DynamicJsResourceHandler</resource-handler>
</application>

如果您碰巧使用 JSF 实用程序库 OmniFaces ,那么您还可以保存样板代码并从其 org.omnifaces.resourcehandler.DynamicResource 扩展相反,您只需要实现 getInputStream() .如果您不使用 OmniFaces,那么您可以随时使用其 source code作为指导。

关于jsf - 如何在 JSF 中加载动态资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727247/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com