Javascript 如何通过处理来自cometd channle的消息cumming来更新JSF2H:datatable
我实际上连接到一个cometd频道,它从服务器端推送消息 我需要使用此消息更新我的h:datatable ------------xhtml---------------------------Javascript 如何通过处理来自cometd channle的消息cumming来更新JSF2H:datatable,javascript,jsf-2,cometd,Javascript,Jsf 2,Cometd,我实际上连接到一个cometd频道,它从服务器端推送消息 我需要使用此消息更新我的h:datatable ------------xhtml--------------------------- <script type="text/javascript"> var map = new Object(); // or var map = {}; function getStatus(k) { return map[k]; } $(docu
<script type="text/javascript">
var map = new Object(); // or var map = {};
function getStatus(k) {
return map[k];
}
$(document).ready (function() {
console.log("**** connect *****");
cometd.handshake(isConnected);
});
function isConnected(handshakeReply){
if (handshakeReply.successful){
console.log("*** client connected ***");
cometd.subscribe('/user', handleMsg,isSubscribed);
}else{
console.log("Connection Fail ");
}
}
function isSubscribed(subscribeReply){
if (subscribeReply.successful){
console.log("***client subscribed ***");
return true;
}
return false;
}
function handlenMsg(message){
console.log(message.data);
map=message.data;
}
</script>
<h:form>
<h:dataTable value="#{bean.orders}" var="o"
styleClass="table1"
>
<h:column>
<f:facet name="header">
<h:outputText id="Label" value="name" />
</f:facet>
<h:outputText id="nameOutput" value="#{o.name}">
</h:column>
<h:column>
<f:facet name="header">
<h:outputText id="amountLabel" value="quantity" />
</f:facet>
<h:outputText id="amountOutput" value="#{o.quantity}">
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText id="statusLabel" value="status" />
</f:facet>
<h:graphicImage library="images" name="ajax-loader.gif"/>
<h:outputText id="statusOutput" value="getStatus('key1'))" />
</h:column>
</h:dataTable>
<h:commandButton type="submit" id="button"
value="submit"
action="#{bean.doAction}"
/>
var map=新对象();//或var-map={};
函数getStatus(k){
返回映射[k];
}
$(文档).ready(函数(){
console.log(“*****connect*****”);
cometd.握手(断开连接);
});
功能已连接(握手重新开始){
if(握手成功){
console.log(“***客户端已连接***”);
cometd.subscribe('/user',handleMsg,isSubscribed);
}否则{
控制台日志(“连接失败”);
}
}
功能已订阅(SubscriberReply){
if(subscribeReply.successful){
console.log(“***客户端订阅***”);
返回true;
}
返回false;
}
函数handlenMsg(消息){
console.log(message.data);
map=message.data;
}
---------------------------豆子------------------
<script type="text/javascript">
var map = new Object(); // or var map = {};
function getStatus(k) {
return map[k];
}
$(document).ready (function() {
console.log("**** connect *****");
cometd.handshake(isConnected);
});
function isConnected(handshakeReply){
if (handshakeReply.successful){
console.log("*** client connected ***");
cometd.subscribe('/user', handleMsg,isSubscribed);
}else{
console.log("Connection Fail ");
}
}
function isSubscribed(subscribeReply){
if (subscribeReply.successful){
console.log("***client subscribed ***");
return true;
}
return false;
}
function handlenMsg(message){
console.log(message.data);
map=message.data;
}
</script>
<h:form>
<h:dataTable value="#{bean.orders}" var="o"
styleClass="table1"
>
<h:column>
<f:facet name="header">
<h:outputText id="Label" value="name" />
</f:facet>
<h:outputText id="nameOutput" value="#{o.name}">
</h:column>
<h:column>
<f:facet name="header">
<h:outputText id="amountLabel" value="quantity" />
</f:facet>
<h:outputText id="amountOutput" value="#{o.quantity}">
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText id="statusLabel" value="status" />
</f:facet>
<h:graphicImage library="images" name="ajax-loader.gif"/>
<h:outputText id="statusOutput" value="getStatus('key1'))" />
</h:column>
</h:dataTable>
<h:commandButton type="submit" id="button"
value="submit"
action="#{bean.doAction}"
/>
公共类Bean{
列出订单;
公共豆()
{
orders=新的ArrayList();
订单o=新订单();
o、 设置名称(“键1”);
o、 数量(“10”);
订单。添加(o)
o=新订单();
o、 设置名称(“键2”);
o、 数量(“20”);
订单。添加(o)
}
公共无效操作(列出订单){
字符串channelName=“/user”;
MarkedReference ref=bayeuxServer.createChannelIfAbsent(channelName,new ServerChannel.Initializer()){
公用void配置通道(ConfigurableServerChannel){
channel.setPersistent(true);
}
});
ServerChannel=ref.getReference();
字符串publishMesg=“”;
订单;
映射数据=新HashMap(
订单。大小();
对于(int i=0;i
我不清楚您想做什么。带有CometD的服务器端Java代码看起来不错。JSF代码在服务器端呈现,因此调用getStatus()
无法引用JavaScript函数。为了在服务器端呈现JSF表,您需要使用要显示的值更新服务器上的一些模型bean。doAction()
的实现只会动态创建发布的对象。