当前位置: 首页 > 知识库问答 >
问题:

引用动态primefaces accordionPanel或dataGrid中包含的元素

商俊智
2023-03-14

这个问题是针对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。

共有1个答案

秦德海
2023-03-14

正如更新中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文件。 但是,在实际的代码中,我很难尝试将其作为类路径的一部分: 我尝试了以下方