我正在使用带有xpage的dataTables jQuery插件,并有一个自定义控件,我将拖到任何页面上,传入viewName的一个自定义属性,它将显示一个使用REST的表--所有这些都是基于Oliver的一些很好的示例。
如果在基本页上使用此自定义控件,则所有操作都很完美,但是,如果该控件位于选项卡(这不是默认的)中,则当我单击包含该控件的选项卡时,在调用viewjson.getId()时会收到一个错误。
我认为问题是因为我在beforePageLoad上设置了viewjson?
你知道我怎么能让它在一个选项卡界面上工作吗?
代码如下:
<xp:this.beforePageLoad><![CDATA[#{javascript:var viewjson = new org.openntf.rest.DynamicView(compositeData.viewName);}]]></xp:this.beforePageLoad>
<table
id="#{javascript:viewjson.getId()}"
class="table table-hover table-striped">
<thead>
<xp:repeat id="repeat1" rows="30" disableOutputTag="true"
var="col">
<xp:this.value><![CDATA[#{javascript:try {
viewjson.getCols()}
catch (e) {
openLogBean.addError(e,this)
}}]]></xp:this.value>
<th>
<xp:text escape="true" disableTheme="true"
value="#{col}">
</xp:text>
</th>
</xp:repeat>
</thead>
<tbody></tbody>
</table>更新
我已经尝试了下面的尝试,首先尝试加载jQuery
<xp:this.resources>
<xp:headTag
tagName="script">
<xp:this.attributes>
<xp:parameter
name="type"
value="text/javascript" />
<xp:parameter
name="src"
value="/xsp/.ibmxspres/.extlib/responsive/jquery/jquery.min.js" />
</xp:this.attributes>
</xp:headTag>
</xp:this.resources>在xsp属性中也是如此
xsp.client.script.dojo.djConfig="dojo-amd-factory-scan": false但是我仍然得到一个没有显示dojo元素的空白页面
发布于 2016-10-27 19:55:21
自定义控件的beforePageLoad事件在加载XPage时被执行。
当稍后激活选项卡时,表被呈现,变量viewjson就消失了。
一种方法是将Java对象放入beforePageLoad中的复合数据变量beforePageLoad中,然后在表中使用它。但是,在呈现页面之前,您需要计算每个选项卡的所有视图。此外,该类不可序列化,不能存储在复合数据变量中。不过,您可以使类可序列化。
更好的方法是在表中实例化Java没有beforePageLoad事件:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<table
id="#{javascript:
var viewjson = new org.openntf.rest.DynamicView(compositeData.viewName);
return viewjson.getId();
}">
<thead>
<xp:repeat id="repeat1" rows="30" disableOutputTag="true"
var="col" value="#{javascript: viewjson.getCols()}">
<th>
<xp:text escape="true" disableTheme="true" value="#{col}">
</xp:text>
</th>
</xp:repeat>
</thead>
<tbody></tbody>
</table>
</xp:view>我用这个ccView测试了上面的自定义控件(带有属性viewName的XPage )
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:br />
<xp:panel id="tabs">
<xe:djTabContainer id="tabContainer"
selectedTab="djTabPane1" defaultTabContent="one">
<xe:djTabPane id="djTabPaneView" title="one" closable="false"
partialRefresh="true">
tab rendered first
</xe:djTabPane>
<xe:djTabPane id="djTabPane2" title="two" closable="false"
partialRefresh="true">
<xc:ccView viewName="ByCity" />
</xe:djTabPane>
<xe:djTabPane id="djTabPane3" title="three" closable="false"
partialRefresh="true">
<xc:ccView viewName="ByName" />
</xe:djTabPane>
</xe:djTabContainer>
</xp:panel>
</xp:view>当用户单击相应的选项卡时,选项卡“2”或“3”中的视图将加载到每个REST服务中。
发布于 2016-10-27 14:45:25
我认为主要的问题是,对于XPages核心控件,在浏览器变为活动之前,非活动选项卡实际上不会呈现给浏览器。因此,您在beforePageLoad()中调用的是寻找当时不存在的内容。可能有一种CSJS可以重新输入数据表。另一种选择是不使用选项卡核心控件,而是使用ext中的dojo版本。图书馆。我很确定dojo版本呈现所有内容,只使用CSS隐藏非活动选项卡。
https://stackoverflow.com/questions/40286627
复制相似问题