Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages 如何为单个Xpage加载不同的主题_Xpages - Fatal编程技术网

Xpages 如何为单个Xpage加载不同的主题

Xpages 如何为单个Xpage加载不同的主题,xpages,Xpages,在我开始之前,之前有人问过这个问题,但是没有一个答案被接受,而且我无法使用提供的答案让它工作 我试图使用dojoTreeGrid,它需要一个“扩展webstandard”的主题,但当我这样做时,我修复了树网格,但它破坏了应用程序的许多其他部分。Web标准似乎与引导严重冲突 我克隆了我的主题,并将“扩展Web标准”添加到克隆中,然后只想在包含网格的Xpage上加载该主题。我尝试在属性中输入“themeID:”。我已经创建了xp:视图的一个参数(如上面链接的SO中所建议的),并且没有任何更改 我怎样

在我开始之前,之前有人问过这个问题,但是没有一个答案被接受,而且我无法使用提供的答案让它工作

我试图使用dojoTreeGrid,它需要一个“扩展webstandard”的主题,但当我这样做时,我修复了树网格,但它破坏了应用程序的许多其他部分。Web标准似乎与引导严重冲突

我克隆了我的主题,并将“扩展Web标准”添加到克隆中,然后只想在包含网格的Xpage上加载该主题。我尝试在属性中输入“themeID:”。我已经创建了xp:视图的一个参数(如上面链接的SO中所建议的),并且没有任何更改


我怎样才能加载次要主题,而不是仅为这一个Xpage加载主主题?

这部作品的一些变体,并在另一篇文章中列出

在faces-config.xml中

  <lifecycle>
    <phase-listener>com.tobysamples.listeners.ThemePhaseListener</phase-listener>
  </lifecycle>

com.tobysamples.listeners.ThemePhaseListener

有一种非常简单的方法可以实现这一点:将另一个XPage放在它自己的NSF中

我知道这听起来很讽刺:我经常告诉人们不要仅仅因为他们的数据位于不同的位置就将代码拆分到不同的容器中。例如,为什么一个CRM应用程序有5个NSF,仅仅是因为从数据架构的角度来看,将联系人、帐户、交互历史、,将所有代码保存在一个地方,并从那里访问所有数据

然而,在这种情况下,为什么不做相反的事情呢?如果你只有一个页面的用户界面要求对你的应用程序的其余部分的UI造成了严重破坏,为什么不为这一个页面制作一个单独的应用程序呢?明显的缺点是,这会增加复杂性,以确保目标页面有足够的上下文来满足这些要求现在,用户来自何处,如何根据该上下文进行操作,以及如何确保在用户返回时将其他应用中发生的任何相关事件通知源应用程序……但是,设计这种交互上下文传输可能比使现有应用程序的方方面面变得更复杂更简单,只是为了满足用户的需要这一页的视觉需求与其他页面不太协调

考虑专门设计的第三方web应用程序,这些应用程序允许源站应用程序与之集成,包括保留品牌。例如,当你在电子商务网站上构建购物车,然后使用PayPal结账时,你暂时离开了你使用的应用程序,现在你在PayPal的网站上,但页面上没有u's now on已经收到了一些来源上下文信息——通常不仅是关于购买本身的信息,而且还有关于卖家的信息,允许至少有一些最小的品牌,与您从其他卖家那里购买时看到的不同。当您完成(或取消)时你的购买,你回到了原来的地方,并且origin应用程序“知道”你离开时发生了什么

如果您设计了一个类似的流程,那么这个网格页面可以被许多应用程序重用,每个应用程序都会在用户到达时告诉它如何找到它必须显示的数据,而且还告诉它如何根据用户来自何处直观地表示它……以及如何在适当的时候将它们带回原来的位置


或者,您可以检查应用程序搜索功能中的哪些缺陷需要首先在网格中显示数据,但这可能是最好的讨论时间。

我找到了一种方法,可以让TreeGrid选择tundra主题,而不要求您的应用程序主题继承自webstandard

当主题扩展webstandard时,我在生成的源代码中注意到许多网格组件都有一个“tundra”类(以及其他类)。当我创建(并应用)一个不从webstandard继承的空主题时,网格组件不会作为一个类继承“tundra”

相应地,当webstandard生效时,页面的
标记会得到一类tundra(和xspView),但在其他情况下不会得到任何类

我可以通过两个步骤修复网格样式:

1) Include dojo.css(因为在未扩展webstandard时似乎不包括它)。此示例将其作为页面级资源加载:

<xp:styleSheet href="/.ibmxspres/dojoroot/dojo/resources/dojo.css"></xp:styleSheet>

2) 将网格
包装在另一个具有“tundra”类的


这在我的演示应用程序中修复了它


这似乎很理想,因为它应该将样式限制在围绕网格的div中。

问题是,这将为此后从.nsf加载的所有页面设置该主题。要重置主题,您必须将此代码添加到数据库中的每个其他XPage中,并让代码重置主题。正是这样,我希望避免这种情况这个方法就是出于这个原因。我在一个阶段侦听器中使用了这个逻辑,但是你必须有一个地方来存储哪个页面得到哪个主题。@TobySample我的情况是,我有大约25个页面使用主主题,然后有一个页面使用次主题。我希望避免为这个主题更改所有其他页面第一,有没有办法在加载页面后将会话属性设置回主会话?因此它会更改属性,加载页面,重置其他页面的属性。你有没有尝试过?我可能会尝试一下。我无法让我的想法发挥作用,因为一旦重新加载页面,之后的所有事件代码都不会运行,因此无法重置会话heme Property这对我的具体问题非常有效。关于一般问题,Toby和Tim都是正确的,底线是这个问题没有很好的答案。根据你的具体情况,这两个问题都是正确的,而且两个问题看起来都太麻烦了,因为似乎应该有一个更简单的解决方法
  <lifecycle>
    <phase-listener>com.tobysamples.listeners.ThemePhaseListener</phase-listener>
  </lifecycle>
<xp:styleSheet href="/.ibmxspres/dojoroot/dojo/resources/dojo.css"></xp:styleSheet>
<div class="tundra">
  <div style="width:400px; height:400px;" id="treeGrid"></div>
</div>