gpt4 book ai didi

gwt - 允许不同用户使用不同的 GWT 视觉主题

转载 作者:行者123 更新时间:2023-12-04 13:44:30 25 4
gpt4 key购买 nike

我的问题是:如何根据登录用户允许不同的 GWT 视觉主题?我想决定在客户登录时使用哪个主题(即在加载 GWT 应用程序之前,所以我很确定这应该是可能的)。我试图使用基于自定义属性的类替换,但失败了,因为只有最后继承的模块的图像集变得可见,即使我可以选择正确的 css 文件......我到处搜索但找不到答案!

最佳答案

感谢 Thomas 的建议,但此解决方案的问题在于您假设 CSS 样式表可供我添加到 ClientBundle(我试过了,但除非您将 css 文件和随附的图片复制到您的项目,你不能那样做)。主题来自外部 GWT 模块。为了模块化,我想保持这种方式(每次我们需要一个新主题时,将一大堆资源导入我的项目会很痛苦)。

我想到的解决方法是在运行时自己编写注入(inject)代码(只需在 HTML 头部注入(inject)一个链接标记)。为了完整起见,这里是执行此操作的代码:

protected void doInjection(String cssFilePath) {
// <link type="text/css" rel="stylesheet" href="sol.css">
Element headEl = Document.get().getElementsByTagName("head").getItem(0);
HeadElement head = HeadElement.as(headEl);
LinkElement link = Document.get().createLinkElement();
link.setType("text/css");
link.setRel("stylesheet");
link.setHref(GWT.getModuleBaseURL() + cssFilePath);
head.appendChild(link);
}

然后你用这样的东西调用这个方法:

doInjection("gwt/standard/standard.css");

然后,从项目的 GWT 模块文件中继承所有 Resources 模块。例如:

  <inherits name='com.google.gwt.user.theme.standard.StandardResources'/>
<inherits name='com.google.gwt.user.theme.dark.DarkResources'/>

继承模块的 *Resources 版本避免自动注入(inject)样式表。

为了决定使用哪个主题,我在模块文件中创建了一个自定义的 GWT 属性,根据这个属性的值,我用一个不同的 Java 类 (如果应该使用不同的主题,则默认类的子类)。这有额外的好处,我可以在每个主题中包含我自己的 ResourceBundle 资源,因为与主题一起使用的替换 Java 类除了注入(inject)正确的 css 文件外,还可以为我的 GWT 代码提供替代资源。

编辑

我想添加一个重要说明:上述解决方案效果很好。但是,如果您的应用程序使用不同的 Locales 或其他 GWT 属性,这种方法可能会导致编译排列的数量激增!只有 6 种不同的主题和 3 种不同的语言环境,在您通常拥有的标准 6 种不同浏览器版本之上,GWT 编译器将创建 6 x 3 x 6 = 108 种不同的编译!!这太疯狂了!!

我最终决定采用的更好的解决方案是在用户登录后在 HttpSession 中设置一个属性,然后根据该属性的值加载适当的 css 文件(onModuleLoad 中的第一件事() 我的入口类)。与上述解决方案的唯一区别在于您如何选择主题。

关于gwt - 允许不同用户使用不同的 GWT 视觉主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960685/

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