从 p:remoteCommand 的 oncomplete 处理程序调用 JavaScript 函数 - 使用一些 JavaScript 代码模拟相同的功能

2023-11-22

注意:虽然这个问题涵盖了很长的文本信息和一堆 Java 代码片段,但它只是针对 JavaScript/jQuery 和一些 PrimeFaces 的东西(只是<p:remoteCommand>)如开头的介绍部分所述。


我从 WebSockets(Java EE 7 / JSR 356 WebSocket API)收到一条 JSON 消息,如下所示。

if (window.WebSocket) {
    var ws = new WebSocket("wss://localhost:8181/ContextPath/AdminPush");

    ws.onmessage = function (event) {
        jsonMsg=event.data;
        var json = JSON.parse(jsonMsg);        
        var msg=json["jsonMessage"];

        if (window[msg]) {
            window[msg](); //It is literally interpreted as a function - updateModel();
        }
    };
}

在上面的代码中,event.data包含一个 JSON 字符串{"jsonMessage":"updateModel"}. Thus, msg将包含一个字符串值,该值是updateModel.

在下面的代码段中,

if (window[msg]) {
    window[msg](); //It is literally interpreted as a JavaScript function - updateModel();
}

window[msg]();导致 JavaScript 函数与<p:remoteCommand>被调用(这又调用actionListener="#{bean.remoteAction}"与相关的<p:remoteCommand>).

<p:remoteCommand name="updateModel"
                 actionListener="#{bean.remoteAction}" 
                 oncomplete="notifyAll()"
                 process="@this"
                 update="@none"/>

update="@none" is not necessarily needed.


收到此消息后,我需要通知所有关联的客户端有关此更新的信息。我使用以下 JavaScript 函数来执行此操作,该函数与oncomplete上述处理程序<p:remoteCommand>.

var jsonMsg;

function notifyAll() {
    if(jsonMsg) {
       sendMessage(jsonMsg);
    }
}

请注意,变量jsonMsg已经在第一个代码片段中分配了一个值 - 它是一个全局变量。sendMessage()是另一个 JavaScript 函数,它实际上通过 WebSockets 向所有关联的客户端发送有关此更新的通知,这在本问题中是不需要的。


这很有效,但是有没有办法在以下情况下发挥一些作用

if (window[msg]) {
    window[msg]();

    //Do something to call notifyAll() on oncomplete of remote command.
}

所以这样notifyAll()可以通过一些 JavaScript 代码直接调用函数(当前附加到oncomplete of <p:remoteCommand>预期的 JavaScript 代码(甚至其他代码)应该模拟这个oncomplete)基本上消除了对全局 JavaScript 变量的依赖(jsonMSg)?


编辑:我试图解决的问题(它可能被认为是附加信息)。

例如,当管理员对名为的 JPA 实体进行一些更改(通过 DML 操作)时Category,实体侦听器被触发,进而导致引发 CDI 事件,如下所示。

@ApplicationScoped
public class CategoryListener {

    @PostPersist
    @PostUpdate
    @PostRemove
    public void onChange(Category category) throws NamingException {
        BeanManager beanManager = (BeanManager) InitialContext.doLookup("java:comp/BeanManager");
        beanManager.fireEvent(new CategoryChangeEvent(category));
    }
}

实体就不用说了Category用注释指定@EntityListeners(CategoryListener.class).

Just one side note (completely off topic) : Getting an instance of BeanManager through a JNDI look-up as done in the preceding code snippet is temporary. The GlassFish Server 4.1 having the Weld version 2.2.2 final fails to inject the CDI event javax.enterprise.event.Event<T> which is supposed to be injected as follows.

@Inject
private Event<CategoryChangeEvent> event;

然后,可以参考上面的相关代码片段,如下触发该事件。

event.fire(new CategoryChangeEvent(category));


我不认为我理解你问题的各个方面,但无论如何我会尽力提供帮助。请注意,我不了解 PrimeFaces,所以我所做的就是阅读文档。

我的理解是,你试图摆脱全局变量。但恐怕,我认为这是不可能的。

这里的问题是,PrimeFaces 不允许您将远程调用的调用进一步透明地传递给oncomplete调用(除非您将其传递给 Bean 的 Java 代码,然后返回到 UI,而这通常不是您想要的)。

然而,我希望,你能非常接近它。

第1部分,JS提前回归

另请注意,人们可能对 Java 和 JavaScript 存在一些误解。

Java 是多线程的,并行运行多个命令,而 JavaScript 是单线程的,通常从不等待某些事情完成。要获得响应式 Web-UI,必须异步执行操作。

因此你的remoteCommand调用(从 JS 端来看)将(通常是异步情况)早于oncomplete处理程序将被调用。这意味着,如果window[msg]()返回,你还没有完成remoteCommand yet.

那么你想用下面的代码来管理什么

if (window[msg]) {
    window[msg]();

    //Do something to call notifyAll() on oncomplete of remote command.
    dosomethinghere();
}

将失败。dosomethinghere()remoteCommand返回(因为 JS 不想等待某些事件,这可能永远不会发生)。这意味着,dosomethinghere()当 Ajax 请求刚刚打开到远程(Java 应用程序)时将被调用。

要在 Ajax 调用完成后运行某些内容,必须在oncomplete例行公事(或onsuccess)。这就是它存在的原因。

第 2 部分,验证msg

请注意一些不同的事情window[msg]()。如果您不能完全信任推送的消息,这可能会被认为有点危险。window[msg]()本质上运行以变量内容命名的任何函数msg。例如如果msg碰巧是close then window.close()将运行,这可能不是您想要的。

你应该确保,msg是一个预期词,并拒绝所有其他词。示例代码:

var validmsg = { updateModel:1, rc:1 }

[..]

if (validmsg[msg] && window[msg])
  window[msg]();

第 3 部分:如何并行处理多个 JSON 消息

全局变量有一些缺点。只有一个。如果您碰巧在 WebSocket 上收到另一条 JSON 消息,而前一条消息仍在处理中remoteCommand,这将覆盖之前的消息。所以notifyAll()会看到新的消息两次,旧的消息丢失。

经典的竞争条件。你必须做的是,创建一个类似注册表的东西来注册所有消息,然后将一些值传递给notifyAll()告知应处理哪些注册消息。

只需进行一点点更改,您就可以并行(此处)或串行(第 4 部分)处理消息。

首先,创建一个计数器来区分消息。也是一个存储所有消息的对象。我们声明我们期望的所有有效消息(参见第 2 部分):

var jsonMsgNr = 0;
var jsonMessages = {};
var validmsg = { updateModel:1 }

现在,每次我们收到一条消息时都添加一条消息:

if (window.WebSocket) {
    var ws = new WebSocket("wss://localhost:8181/ContextPath/AdminPush");

    ws.onmessage = function (event) {
        var jsonMsg = event.data;
        var json = JSON.parse(jsonMsg);        
        var msg=json["jsonMessage"];

        if (validmsg[msg] && window[msg]) {
            var nr = ++jsonMsgNr;
            jsonMessages[nr] = { jsonMsg:jsonMsg, json:json };

为了能够通过nr to NotifyAll()需要向 Bean 传递一个附加参数。我们就这样称呼它吧msgNr:

            // Following might look a bit different on older PrimeFaces
            window[msg]([{name:'msgNr', value:nr}]);
        }
    }
}

也许看看https://stackoverflow.com/a/7221579/490291有关以这种方式传递值的更多信息。

The remoteActionbean 现在获得一个附加参数msgNr已通过,必须通过 Ajax 传回。

不幸的是,我不知道(抱歉)这在 Java 中是什么样子。因此请确保您对 AjaxCall 的回答复制了msgNr又出来了。

另外,由于文档对这个主题很安静,我不确定参数如何传递回oncomplete处理程序。根据 JavaScript 调试器,notifyAll()获取3个参数:xhdr, payload, and pfArgs。不幸的是,我无法设置测试用例来了解情况如何。

因此,该函数看起来有点像(请耐心等待):

function notifyAll(x, data, pfArgs) {
   var nr = ???; // find out how to extract msgNr from data

   var jsonMsg = jsonMessages[nr].jsonMsg;
   var json = jsonMessages[nr].json;
   jsonMessages[nr] = null;  // free memory

   sendMessage(jsonMsg);

   dosomething(json);
}

如果将其分成两个函数,那么您可以调用notifyAll()来自应用程序中的其他部分:

function notifyAll(x, data, unk) {
   var nr = ???; // find out how to extract msgNr from data

   realNotifyAll(nr);
}

function realNotifyAll(nr) {
  if (!(nr in jsonMessages)) return;

  var jsonMsg = jsonMessages[nr].jsonMsg;
  var json = jsonMessages[nr].json;
  delete jsonMessages[nr];  // free memory

  sendMessage(jsonMsg);

  dosomething(json);
}

这里有些东西有点多余。例如,您可能不需要json元素在jsonMessages或者想要解析json再次节省一些内存,以防 json 很大。然而,该代码并不是最优的,而是易于根据您的需求进行调整的。

第 4 部分:序列化请求

现在进行序列化的更改。通过添加一些信号量这非常容易。 JavaScript 中的信号量只是变量。这是因为只有一个全局线程。

var jsonMsgNr = 0;
var jsonMessages = {};
var validmsg = { updateModel:1 }
var jsonMsgNrLast = 0;           // ADDED

if (window.WebSocket) {
    var ws = new WebSocket("wss://localhost:8181/ContextPath/AdminPush");

    ws.onmessage = function (event) {
        var jsonMsg = event.data;
        var json = JSON.parse(jsonMsg);        
        var msg=json["jsonMessage"];

        if (validmsg[msg] && window[msg]) {
            var nr = ++jsonMsgNr;
            jsonMessages[nr] = { jsonMsg:jsonMsg, json:json };

            if (!jsonMsgNrLast) {    // ADDED
                jsonMsgNrLast = nr;  // ADDED
                window[msg]([{name:'msgNr', value:nr}]);
            }
        }
    }
}

function realNotifyAll(nr) {
  if (!(nr in jsonMessages)) return;

  var jsonMsg = jsonMessages[nr].jsonMsg;
  var json = jsonMessages[nr].json;
  delete jsonMessages[nr];  // free memory

  sendMessage(jsonMsg);

  dosomething(json);

  // Following ADDED
  nr++;
  jsonMsgNrLast = 0;
  if (nr in jsonMessages)
    {
      jsonMsgNrLast = nr;
      window[jsonMessages[nr].json.msg]([{name:'msgNr', value:nr}]);
    }
}

Note: jsonMsgNrLast可能只是一个标志(真/假)。然而,将当前处理的数字放在变量中也许可以在其他地方有所帮助。

话虽如此,如果出现故障,就会出现饥饿问题sendMessage or dosomething。所以也许你可以稍微交错一下:

function realNotifyAll(nr) {
  if (!(nr in jsonMessages)) return;

  var jsonMsg = jsonMessages[nr].jsonMsg;
  var json = jsonMessages[nr].json;
  delete jsonMessages[nr];  // free memory

  nr++;
  jsonMsgNrLast = 0;
  if (nr in jsonMessages)
    {
      jsonMsgNrLast = nr;
      // Be sure you are async here!
      window[jsonMessages[nr].json.msg]([{name:'msgNr', value:nr}]);
    }

  // Moved, but now must not rely on jsonMsgNrLast:
  sendMessage(jsonMsg);
  dosomething(json);
}

这样AJAX请求已经发送出去了sendMessage在跑。如果现在dosomething有 JavaScript 错误或类似错误,消息仍然可以正确处理。

请注意:所有这些都是在未经任何测试的情况下输入的。可能存在语法错误或更糟的情况。对不起,我已经尽力了。如果您发现错误,编辑就是您的朋友。

第五部分:JS 直接调用

现在,所有这些都已就位并进行了序列化运行,您始终可以调用之前的notifyAll() using realNotifyAll(jsonMsgNrLast)。或者您可以显示jsonMessages在列表中并选择任意数字。

通过跳过呼叫window[jsonMessages[nr].json.msg]([{name:'msgNr', value:nr}]);(以上window[msg]([{name:'msgNr', value:nr}]);)您还可以停止 Bean 处理并使用常用的 JQuery 回调按需运行它。为此创建一个函数并再次更改代码:

var jsonMsgNr = 0;
var jsonMessages = {};
var validmsg = { updateModel:1 }
var jsonMsgNrLast = 0;
var autoRun = true;        // ADDED, set false control through GUI

if (window.WebSocket) {
    var ws = new WebSocket("wss://localhost:8181/ContextPath/AdminPush");

    ws.onmessage = function (event) {
        var jsonMsg = event.data;
        var json = JSON.parse(jsonMsg);        

        if (validmsg[msg] && window[msg]) {
            var nr = ++jsonMsgNr;
            jsonMessages[nr] = { jsonMsg:jsonMsg, json:json };

            updateGuiPushList(nr, 1);

            if (autoRun && !jsonMsgNrLast) {
                runRemote(nr);
            }
        }
    }
}

function realNotifyAll(nr) {
  if (!(nr in jsonMessages)) return;

  var jsonMsg = jsonMessages[nr].jsonMsg;
  var json = jsonMessages[nr].json;
  delete jsonMessages[nr];  // free memory

  updateGuiPushList(nr, 0);

  jsonMsgNrLast = 0;
  if (autoRun)
    runRemote(nr+1);

  // Moved, but now must not rely on jsonMsgNrLast:
  sendMessage(jsonMsg);
  dosomething(json);
}

function runRemote(nr) {
  if (nr==jsonMsgNrLast) return;
  if (nr in jsonMessages)
    {
      if (jsonMsgNrLast) { alert("Whoopsie! Please wait until processing finished"); return; }
      jsonMsgNrLast = nr;

      updateGuiPushList(nr, 2);

      // Be sure you are async here!
      window[jsonMessages[nr].json.msg]([{name:'msgNr', value:nr}]);
    }
}

现在您可以开始处理runRemote(nr)并调用完成函数realNotifyAll(nr).

功能updateGuiPushList(nr, state) with state=0:finished 1=added 2=running是对 GUI 代码的回调,它更新屏幕上等待处理的推送列表。放autoRun=false停止自动处理和autoRun=true用于自动处理。

注:设置后autoRun from false to true你需要触发runRemote一次最低的nr, 当然。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 p:remoteCommand 的 oncomplete 处理程序调用 JavaScript 函数 - 使用一些 JavaScript 代码模拟相同的功能 的相关文章

  • 在Javascript中按降序对字符串进行排序(最有效)?

    W3Schools 有这个例子 var fruits Banana Orange Apple Mango fruits sort fruits reverse 这是在 Javascript 中按降序对字符串进行排序的最有效方法吗 Updat
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 如何使用 JavaScript 获取没有 HTML 元素的纯文本?

    我的 HTML 中有 1 按钮和一些文本 如下所示 function get content I don t know how to do in here
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • javascript中按tab键时如何调用函数?

    我有一个这样的功能 function whenEmpty field if field value field style backgroundColor ffcccc alert Please fill the field field f
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • IE 中的 jQuery .width(val) 错误 - 无效参数

    通过ajax加载内部div book table 后 我想调整正文的宽度以适应更大的内容 var new width parseInt book table css width 407 body width new width 在 FF 和
  • 如何将送货地址复制到帐单地址

    我想知道是否可以将送货地址复制到帐单地址 当用户单击与送货地址相同的复选框时 送货地址值将被复制到账单输入字段 我完成了大部分部分 但我不确定如何将选择菜单 状态 值复制到帐单地址 我真的很感谢任何帮助 My code document r
  • 如何通过jquery更改元素的类名

    div class bestAnswerControl div class IsBestAnswer div div 我想补充一下 bestanswer some attribute 我想更换class IsBestAnswer div 到
  • JavaScript 代码在不使用 ActiveX 的情况下截取网站屏幕截图

    我有一个用户与之交互的 JavaScript 应用程序 我需要保存当前界面的外观 裁剪出我需要的部分 或者通过指定div只拍摄我需要的部分 然后发送回服务器 显然任何外部服务都无法做到这一点 我需要一个 JavaScript 或Flash
  • JavaScript onresize 事件多次触发

    我在尝试仅在触发 onresize 事件时运行一次函数时遇到一些麻烦 我已经看过这个问题DOM onresize 事件 https stackoverflow com questions 1500312 javascript onresiz
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch
  • 显示覆盖以覆盖整个页面

    我有一个正在加载的网络应用程序iframe 我需要显示一个覆盖 div 来覆盖整个页面 问题是叠加层当前仅显示在iframe区域而不覆盖整个页面 我们的应用程序 子应用程序 是加载的一组应用程序的一部分iframe 你可以做这样的事情 di
  • 使用异步调用时如何从 javascript 更新元刷新?

    我有一个系统 它使用元刷新来注销页面 该系统会在空闲用户后进行清理 不用担心 服务器也会导致会话超时 我开始通过 ajax 进行一些操作 不是真正的 xml 但这不是重点 我可以运行从异步请求返回的javascript 所以我想知道是否可以
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 角度材料将 angularjs 1.5 组件加载到 $mdDialog 中

    目标 使用组件而不是使用 scope 来设置数据 没有可共享的错误 问题是对话框加载组件时未设置数据元素 屏幕截图显示了对话框的当前状态 选项卡 2 信息 中应该有一个绑定的对象 我可以使用 onComplete 事件验证对话框加载后对象
  • 如何通过两个键对 JSON 对象进行排序?

    我有一个 JSON 对象 我想先按一个键排序 然后按第二个键排序 类似于 SQL 中按两列排序 以下是我想要的 JSON 示例 GROUPID 3169675 LASTNAME Chantry 我想按 GROUPID 然后按 LASTNAM
  • 每个连接请求都被视为直接连接请求+ android ble

    我们正在编写一个 ble 应用程序 希望与我们想要连接的外设建立持久连接 出于同样的目的 每当我们失去现有连接时 我们都希望与外围设备重新连接 因此 我们作为中心的 Android 应用程序只是尝试通过调用 bluetoothdevice
  • Tensorflow 因 CUDNN_STATUS_ALLOC_FAILED 崩溃

    在网上搜索了几个小时没有结果 所以我想在这里问一下 我正在尝试按照 Sentdex 的教程制作一辆自动驾驶汽车 但是在运行模型时 我遇到了一堆致命错误 我在网上搜索了解决方案 很多人似乎都有同样的问题 但是 我没有找到任何解决方案 包括这个
  • KMM 与公共(共享)模块中的 Java 源

    由于平台限制 我们无法将 Java 源代码与 Kotlin Multiplatform Mobile 一起使用 但如果 Kotlin 与 Java 100 兼容 为什么我们不能将 Java 与 Kotlin Multiplatform Mo
  • OpenSSL 连接:警报内部错误

    我使用 SNI 在单个服务器上运行 100 个 HTTPS 服务 实际上 我无权访问它们 这是一项任务 我只知道他们的域名N xxx yy其中 N 的范围是 00 到 99 分配的目标是评估与每个服务器的每个连接的安全性 因此 某些服务器包
  • Bash 需要测试字母数字字符串

    尝试验证字符串中是否仅包含小写 大写或数字 if TITLE a zA Z0 9 then echo INVALID fi 想法 更新 变量 TITLE 目前只有大写文本 因此它应该通过并且不应该输出任何内容 但是 如果我向 TITLE 添
  • “find -exec”或“find |”哪个更快xargs -0'?

    在我的 Web 应用程序中 我使用 PHP 脚本渲染页面 然后从中生成静态 HTML 文件 静态 HTML 提供给用户以提高性能 HTML 文件最终会变得陈旧 需要删除 我正在讨论两种编写驱逐脚本的方法 第一个是使用单个 find 命令 例
  • 使用 ServiceWorker 缓存 iframe 请求

    我正在尝试使用 ServiceWorker 缓存 iframe 的请求 使用 sw toolbox js 但无论我如何尝试 正如 Chrome Network Tab 告诉我的那样 ServiceWorker 永远不会提供文件 这是我的 s
  • ElasticSearch 5:带有 multi_field 的 MapperParserException

    此映射已在 ES 2 X 中运行 现在在 ES 5 中出现异常 type1 properties name type multi field fields name type string index analyzer standard i
  • Soap 错误,编码:对象没有“RecordId”属性

    我正在在线制作一个连接到肥皂网络服务的注册表单 并且应该能够通过它保存付款信息 PHP是这样的 function create member fee wsdl WSDL LOCATION client new mySoap wsdl arr
  • 如何在 NASM 汇编中进入 32 位保护模式?

    我正在学习 x86 汇编 并且正在尝试在 NASM 中制作一个玩具操作系统 但我不明白一些东西 我制作了一个成功启动内核的引导加载程序 从包含内核文件的软盘中加载 14 个扇区 在这些标记为的扇区中搜索文件kernel feo 将该文件加载
  • PHP:gzdeflate 在多台机器上安全吗?

    在 PHP 手册中有一条关于 gzdeflate 的评论说 gzcompress 产生更长的数据 因为它嵌入了以下信息 字符串上的编码 如果您正在压缩数据 仅在一台机器上处理 那么您无需担心 关于您使用其中哪些功能 但是 如果您通过 使用这
  • Django 中的 TDD,如何对我的模型进行单元测试?

    我是 TDD 新手 并尝试在 Django 项目中应用 TDD 实践 基于伦敦学校 TDD 工作流程 我从外到内 视图层 表单层和模型层工作 在表单层 我计划构建一个模型表单 其中包含一些 自定义验证方法 我认为 基于TDD 我只需要测试我
  • 并发修改异常

    我目前正在开发一个多线程应用程序 偶尔会收到并发修改异常 平均大约每小时一次或两次 但以看似随机的间隔发生 有问题的类本质上是映射的包装器 它扩展了LinkedHashMap accessOrder 设置为 true 该类有几个方法 syn
  • 如何在 MPAndroidChart 中添加 x 轴作为日期时间标签?

    我在项目中实现了温度报告折线图 MPAndroidChart 库 在 X 轴上应绘制日期时间 在 Y 轴上应绘制温度 我刚刚在 X 轴标签中添加了日期时间作为字符串 但它已折叠 所以请任何人指导我 使用 MPAndroidChart 3 0
  • Java ConcurrentMarkSweep 垃圾收集器未清除所有垃圾

    简短形式 CMS 垃圾收集器似乎无法收集不断增加的垃圾量 最终 我们的 JVM 被填满 应用程序变得没有响应 通过外部工具 JConsole 或jmap histo live 清理一次 更新 问题似乎与 JConsole 的 JTop 插件
  • 以编程方式将 .reg 文件合并到 win32 注册表中

    以编程方式将 reg 文件合并到注册表中的最佳方法是什么 这是为了单元测试 reg 文件是一个测试工件 将在测试开始和结束时添加然后删除 或者 如果有更好的方法对注册表进行单元测试 可以使用 reg 文件删除注册表项 尽管我不确定它的记录情
  • 对每行的某些列的单元格求和

    我想计算某些列的总和 然后将此求和应用于每一行 不幸的是 我只能迈出第一步 现在我该如何让它发生在每一行 我知道 R 不需要循环 什么是好的方法 我的矩阵 zscore 如下所示 a b c t y 1 3 4 7 7 4 2 4 56 6
  • 从 p:remoteCommand 的 oncomplete 处理程序调用 JavaScript 函数 - 使用一些 JavaScript 代码模拟相同的功能

    注意 虽然这个问题涵盖了很长的文本信息和一堆 Java 代码片段 但它只是针对 JavaScript jQuery 和一些 PrimeFaces 的东西 只是