gpt4 book ai didi

jsf - Primefaces 如何插入

work?

转载 作者:行者123 更新时间:2023-12-03 03:33:42 25 4
gpt4 key购买 nike

我正在尝试使用 PF Push Counter 示例,但没有成功。我有两个 portlet。一种是计数器 portlet。另一个是counterview portlet。如何订阅(注册)“ channel ”?

我的代码几乎直接来自 PF Showcase 示例。

1) 柜台(出版商)计数器.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:body>


<h:form id="form">
<h:outputText id="out" value="#{counterBean.count}"
styleClass="ui-widget display" />

<p:commandButton value="Click"
actionListener="#{counterBean.increment}" />
</h:form>



</h:body>

</html>
<小时/>

CounterBean.java

@ApplicationScoped
@ManagedBean
public class CounterBean {

private volatile int count;

public int getCount() {
return count;
}

public void setCount(int count) {
this.count = count;
}

public void increment() {
count++;
System.out.println("increment() " + count);
EventBus eventBus = EventBusFactory.getDefault().eventBus();
eventBus.publish("/counter", String.valueOf(count));
}

2) CounterView(消费者)CounterView.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:body>
<h:form id="form1">
<h:outputText id="out" value="What's my count?" styleClass="display" />

<p:remoteCommand name="updateWidgets"
actionListener="#{consumerBean.printMessage()}" update=":form1:out" />
</h:form>
<p:socket onMessage="handleMessage" channel="/counter" />

<script type="text/javascript">
function handleMessage(data) {
updateWidgets();
}
</script>
</h:body>

</html>

使用此示例

How Primeface Socket works?

CounterResource.java

@PushEndpoint("/counter")
public class CounterResource {

@OnMessage(encoders = { JSONEncoder.class })
public String onMessage(String count) {
System.out.println("OnMessage " + count );
return count;
}
}
<小时/>
@SessionScoped
@ManagedBean
public class ConsumerBean {
private int count;
private String message;


public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}

public void printMessage(){
System.out.println("Consumer Bean Listener!");

}



}

问:count.xhtml 上的计数器增加,但 counterView.html 上没有任何反应。我设置了几个断点,但 Consumer bean 中没有任何停止。

我怎样才能得到这份工作?这似乎是一个简单的例子,但无法使其工作。你能帮忙吗?

最佳答案

第一:你的 ConsumerBean 是用来做什么的?您有一个应用程序范围的 CounterBean,其中包含您希望通过“push”显示的计数器。那么为什么 ConsumerBean 中还有另一个计数器呢?

第二:在 CounterView.xhtml 中,您根本不显示计数器,甚至 ConsumerBean 的计数器也不显示。

在 CounterView.xhtml 页面中使用 CounterBean(及其计数器)。在 h:outputText 中而不是“我的计数是多少?”固定值使用#{counterBean.count}(与 counter.xhtml 中的方式相同)。

顺便看一下官方的demo,效果很好: http://www.primefaces.org/showcase/push/counter.xhtml

关于jsf - Primefaces 如何插入 <p :socket> work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com