我有一个应用程序范围的bean,它将JSON对象推送到一个通道,如下所示:
<o:socket channel="controllerEventChannel" onmessage="function(message) {
var controllerId = message.controllerId;
var deviceId = message.deviceId;
var companyKey = message.companyKey;
onMessage([
{ name: 'controllerId', value: controllerId },
{ name: 'deviceId', value: deviceId },
{ name: 'companyKey', value: companyKey }
]);
}"
/>
<p:remoteCommand name="onMessage" actionListener="#{controllerGroupDashboardBean.refreshListener()}"
update="MainForm:showList MainForm:equipmentView MainForm:mapEquipmentView"/>
但是我已经厌倦了重复自己,更愿意将一个json数组传递给通道,它可以直接传递给远程命令,如下所示:
<o:socket channel="controllerEventChannel" onmessage="function(message) {
onMessage(message);
}"
/>
<p:remoteCommand name="onMessage" actionListener="#{controllerGroupDashboardBean.refreshListener()}"
update="MainForm:showList MainForm:equipmentView MainForm:mapEquipmentView"/>
但是,这似乎不起作用。我像这样提取参数:
Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String companyKey = params.get("companyKey");
String controllerId = params.get("controllerId");
String deviceId = params.get("deviceId");
每个参数都解析为null,奇怪的是,Map似乎包含Map到“”的参数“undefined”(即空字符串)。
有人知道吗
1条答案
按热度按时间w8biq8rn1#
我使用OmniFaces命令脚本来实现这一点,没有任何问题。
编辑:
要获取请求参数,请使用OmniFaces获得更整洁的代码:
编辑2:
在socket中,类似这样:
在MyBean中,类似于:
如果你想更好,你可以从MyBean更新(注意我在XHTML中有render="@none”,这是因为我可以有条件地决定在bean中更新什么):