这个问题是针对accordionPanel的,但我相信可以询问类似的动态渲染器,比如dataGrid。
我想在每个手风琴标签上的画布上画画。与此JSFIDLE示例类似。
使用此accorionPanel:
<form id="someForm">
<p:accordionPanel id="accordion" value="#{dataModel.values}" var="value">
<p:tab id="entry" title="Entry - #{value}">
<div id="layout">
<canvas id="canvas" width="300" height="200">
</canvas>
<div id="foo" class="foo">#{value.data1}</div>
<div id="bar" class="bar">#{value.data2}</div>
</div>
</p:tab>
</p:accordionPanel>
<p:remoteCommand name="updateAccordion" update="accordion"/>
</form>
呈现html时,foo和bar获得类似于:someForm:entry:0:foo
,:someForm:entry:1:foo
,等等的ID。如何通过javascript以编程方式访问这些元素,就像我在JSFIDLE中显示的那样?
如果有一条你认为更适合我的路,我绝对愿意尝试。
以下是我读过的一些其他问题,但没有得到足够的信息来帮助:
如何做PrimeFaces选择器在更新="@(. myClass)"工作?
如何找到ajax更新/渲染组件的客户端ID?找不到从“bar”引用的表达式为“foo”的组件
最后一个链接似乎有最好的细节,但它似乎只是不可能做我想做的事情。
非常感谢你的帮助,我期待着获得一些新的知识。
非常感谢。
更新:
我能够想出一个解决方案,并希望与其他人分享,最终在类似的情况下,但首先想补充一些更多的细节。
现在重读我的问题,我想我遗漏了一些关于如何更新acordionPanel的细节。支持bean维护每个选项卡中出现的内容的状态,当bean更新时,它通过web套接字通知客户机状态已更改。在这个通知中,除了远程命令将更新的内容之外,我还需要在每个选项卡上绘制一些信息。在处理来自websocket的消息时,它将调用上面的远程命令来更新accordionPanel。
正如更新中promise的,这就是我解决问题的方法。
我的主要问题是,我需要能够关联传递给网络套接字的JSON数据,告诉手风琴更新。JSON数据包含一个密钥,但是超文本标记语言本身没有密钥。为此,我添加了一个data-key
属性到我的div。有了这个属性,我现在能够将每个手风琴选项卡与JSON数据相关联。我还在手风琴上定义了WidgetVar,这样我就可以更好地处理选项卡。
<form id="someForm">
<p:accordionPanel id="accordion" value="#{dataModel.values}" var="value" widgetVar="accordion">
<p:tab id="entry" title="Entry - #{value.title}">
<div class="layout" data-key="#{value.key}">
<canvas id="canvas" width="300" height="200">
</canvas>
<p:outputPanel id="foo" styleClass="foo">#{value.data1}</p:outputPanel>
<p:outputPanel id="bar" styleClass="bar">#{value.data2}</p:outputPanel>
</div>
</p:tab>
</p:accordionPanel>
<p:remoteCommand name="updateAccordion" update="accordion" oncomplete="processUpdate()"/>
</form>
当JSON在脱离web套接字后被处理时,我保存了数据,以便在ajax调用完成后,
processUpdate()
可以引用它。
这使得
processUpdate()
看起来像这样:
// JSON data from original update message
var canvasData = ...;
function drawLine() {
// ...
}
function processUpdate() {
var tabs = PF('accordion').panels;
for (var i = 0; i < tabs.length; i++) {
var tab = $(tabs[i]);
var key = tab.find('.layout').attr('data-key');
for (var j = 0; j < canvasData.length; j++) {
// Find the data that matches key
if (canvasData[j].key == key) {
var data = canvasData[jj];
break;
}
}
var canvas = $('#canvas');
// With a handle on the tab, I could now ignore the `someForm:entry:1:`
// prefix that made the element unique as I am now in the context of
// one tab.
var foo = tab.find('[id$=foo]');
var bar = tab.find('[id$=bar]');
drawLine(canvas, data, foo, bar);
}
}
@Kukeltje-谢谢你试图帮我解决问题。
尝试使用页面中的示例XML文件“示例1/Log4j 2 XML配置”: http://logging.apache.org/log4j/2.x/manual/migration.html 但它给出了: 有什么想法吗? 我在pom.xml中使用这种依赖关系, 我在课堂上使用这个: 我指定配置文件如下:
因此,目前我正试图了解Java8。 我有这个流操作 但是,有时e.foo()可以是Null或e.bar()可以是null或e.baz()可以是null。 所以,我只想过滤那些事件,其中任何一个方法都会返回空值。 在Java8中,一种干净的方法是什么。
问题内容: 在JSF2中,是否可以使用Ajax请求动态更改ui:include的src值(例如PrimeFacesp:commandButton)?谢谢。 那就是我现在所拥有的。是否有可能使它成为Ajax(使用p:commandButton)? 问题答案: 另一个答案中提出的JSTL标签不是必需的,并且不能很好地重用。 这是一个使用纯JSF的基本示例(假设您运行Servlet 3.0 / EL 2
本文向大家介绍请说明一下JSP中的静态包含和动态包含的有哪些区别?相关面试题,主要包含被问及请说明一下JSP中的静态包含和动态包含的有哪些区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JSP 静态包含是通过JSP的include指令包含页面,动态包含是通过JSP标准动作jsp:forward包含页面。静态包含是编译时包含,如果包含的页面不存在则会产生编译错误,而且两个页面的"conte
我需要一个关于xml验证问题的建议。我的问题是我需要为XML验证设置一个XSD,它定义了两个强制字段和两个可选字段。根据可用数据,字段切换的特征。 如果满足上述任一情况,则XML应有效。 应能够填写AAA和BBB字段。填写这些字段后,CCC和DDD可能为emtpy 我正在考虑像下面这样的结构,但我无法用我的ALTOVA XMLSPY 2012保存它。它说内容模型不是唯一的。 有没有办法实现我想做的
问题内容: 我正在使用aQute Bnd工具集创建OSGi捆绑包,并打包了一些相关的“资源”文件。我创建的资源目录中包括 .css文件和 .xsd文件。 我在 bundle.bnd 文件中包含以下内容: 当我进行构建时,生成的 .jar文件在jar捆绑包文件顶部目录的resources目录中具有 .css和* .xsd文件。 但是,在实际的代码中,我很难尝试将其作为类路径的一部分: 我尝试了以下方