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

在selectOneMenu上显示监听器

洪逸清
2023-03-14

我对primefaces ajax调用侦听器有问题。(primefaces 4.0、JSF 2.0、JBoss 6.1.1)

这是我定义的SelectOne菜单:

<p:selectOneMenu id="sistema" label="Sistema" value="#{searchSchedulingBean.selectedSystem}">
    <p:ajax listener="#{searchSchedulingBean.systemChangeListener}" 
        process="@this"
        event="change"
        update="autostrada"/>
    <f:selectItems value="#{searchSchedulingBean.systemsList}" />
</p:selectOneMenu>

这是我的managedBean的主要部分

@ManagedBean
@ViewScoped
public class SearchSchedulingBean implements Serializable {
    ...
    @PostConstruct
    public void init() {
        logger.info("init executed");
        ...
    }

    public void systemChangeListener() {
        logger.info("listener executed");
        ...
    }

当我打开页面时,日志告诉我init方法已被执行,selectOneMenus已正确填充,因此我假设托管bean正在工作。如果我更改了我在上面写的selectOneMenu,我想修改的selectOneMenu会受到影响,因为它是页面上唯一选择列表初始值的selectOneMenu,但条目没有按照我的要求更新,并且systemChangeListener方法没有执行,因为我在日志中没有看到“listener executed”。

为了调试的目的,我试图将托管bean从@VieweScoped更改为@ResestScoped,似乎selectOneMenu的更改会触发一个事件,因为每次修改菜单选择时,我都可以在日志上看到“初始化执行”(ManagedBean被重新创建为管理事件),但我在日志上没有看到“监听器执行”,因此监听器方法没有执行。没有引发异常。有办法解决吗?

我试过你的建议,但还是没用。我使用@ManagedBean@RequestScoped作为托管bean类注释,从日志中我可以看到,每当selectonemenu发生更改但listener方法未执行时,托管bean都会被启动。这可能是JBoss 6.1.1(Jsf 2.0)和Primefaces 4.0之间的兼容性问题吗?如果是,建议JBoss 6.1.1使用哪个版本的primefaces?使用primefaces是否需要任何特定配置?为了完整起见,我在这里写了部署描述符

网状物xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0"
         metadata-complete="false"> 
    <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>programmazioni.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

jboss网站。xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/PresentationModule</context-root>
</jboss-web>

这些是我在pom中导入的依赖项。xml

<dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.3-1101-jdbc4</version>
        </dependency>
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>4.0</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.7</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-html" target="_blank">log4j12</artifactId>
            <version>1.7.7</version>
            <scope>provided</scope>
        </dependency>

共有3个答案

夹谷星河
2023-03-14

我刚刚解决了,这个问题是由selectOneMenu的属性值引起的,该属性值必须是String类型,但在我的ManagedBean中,我设置为SseltItem类型。

程俊健
2023-03-14

试试这个。这对我有用

<p:ajax listener="#{searchSchedulingBean.systemChangeListener}" update="autostrada"/>
司马越
2023-03-14

解决方案1:

代替

<p:ajax listener="#{searchSchedulingBean.systemChangeListener}" 

通过

<p:ajax listener="#{searchSchedulingBean.systemChangeListener()}" 

解决方案2:

代替

systemChangeListener()

通过

systemChangeListener(AjaxBehaviorEvent evt)
 类似资料:
  • 我正在使用Netty编写Java游戏服务器。我可以从本地主机成功连接客户端,但无法从远程PC连接。util中没有显示侦听套接字。我是不是遗漏了什么?

  • 今天,当我使用chromedriver运行selenium时,我在控制台上看到了这条消息。我该如何抑制这种情绪? 相关代码: 我使用chromedriver的2.30版本也得到了同样的信息。 我以前没有收到过这条消息。我所做的唯一更改是将chrome更新为62.0.3202.94版(官方版本)(64位) Python 3.6.3 64,硒3.4.3, Windows 7 64. 编辑:我在Chro

  • 问题内容: MongoDB建议,处理安全性的简单方法是在受信任的环境中运行安全性,因为“在这种配置中,必须确保只有受信任的计算机才能访问数据库TCP端口。” 这样做的最佳方法是什么?mongodb是否有办法仅本地监听localhost? 我正在使用Ubuntu 10.10 问题答案: 将以下行添加到: 正如@Josh Rickard在评论中所述:不要忘记在更新配置文件后重新启动进程:

  • Listener架构概述 Listener Listener.DrainType (Enum) Filter FilterChainMatch FilterChain Listener Listener proto { "name": "...", "address": "{...}", "filter_chains": [], "use_original_dst": "{...}

  • 我们面临错误,应用程序无法连接到队列管理器,原因代码为mqrc 2538, “侦听器可用,但当我试图显示此侦听器的状态时,它显示未找到MQ对象。” 我们已经检查了错误日志,但没有相关客户端失败的信息。我们手动启动了监听器,监听器信息只在错误日志中可用。 我们还检查了“/var/mqm/error”,我们发现了FDC文件“Probe ID:xy132002”,我们与sysadmin有联系,他们挂载了

  • 问题内容: 我正在开发一个Android应用程序,该应用程序将继续保持与Internet的连接。如果互联网是陶氏的,则应向用户提供适当的消息。 有没有像Internet Listener这样的东西?或如何实施此事件,以便每当没有Internet连接时都应发出警报。 问题答案: 为此创建一个广播接收器,并将其注册到清单文件中。 首先创建一个新类并扩展BroadcastReceiver。 将此代码放在