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

当使用f:ajax时,JSF没有启动bean setter

楚举
2023-03-14

这是我之前关于页面组件的条件呈现的帖子的更新。现在,我可以使用f:ajax标记根据选定的用户输入在页面上有条件地呈现不同的组件。问题是,当我单击commandbutton时,提交时没有读取使用ajax有条件呈现的输入。我猜这是因为当我添加新组件时,整个页面都没有重新提交,而且提交按钮看不到它们,即使它们在那里。这是我表单页面的部分(它被包装在一个h:form标签中):

            <h:outputLabel for="selectPersonType" value="Select Type: "/>
            <h:selectOneMenu id="selectPersonType" value="#{addPersonBean.personType}" label="Person Type" required="true">
                <f:selectItem itemValue=""/>
                <f:selectItems value="#{listBean.personTypes}" />
                <f:ajax render="results"/>
            </h:selectOneMenu>
            <h:message for="selectPersonType" style="color: red"/>
        </h:panelGrid>

        <h:panelGroup id="results">
            
            <h:panelGroup rendered="#{addPersonBean.personType == 'STUDENT'}">
                <h:outputLabel for="selectSchoolType" value="School Type: " />
                <h:selectOneMenu id="selectSchoolType" value="#{addPersonBean.schoolType}">
                    <f:selectItems value="#{listBean.schoolTypes}" />
                    <f:ajax execute="selectSchoolType"/>
                </h:selectOneMenu>
            </h:panelGroup>
            
            <h:panelGroup rendered="#{addPersonBean.personType == 'PATIENT'}">
                <h:outputLabel for="smoker" value="Smoker? " />
                <h:selectBooleanCheckbox id="smoker" value="#{addPersonBean.smoker}">
                    <f:ajax execute="smoker"/>
                </h:selectBooleanCheckbox>
  
            </h:panelGroup>
        </h:panelGroup>

        <h:commandButton value="Add Person" action="#{addPersonBean.action}"/>

这里的问题是,当我单击commandButton时,没有设置ID为“selectSchoolType”和“smoker’s”值的组件,因为它们是在页面加载后使用selectPersonType选择菜单有条件地呈现的。有没有办法在组件的值更改时而不是在我单击“提交”按钮时触发组件(因此,应该在我单击“提交”之前处理它们的值)。如您所见,我曾尝试使用f:ajax,将execute属性附加到所讨论的组件,但它似乎不起作用。(我认为这些组件的默认事件是valueChange,所以没有将它们添加到f:ajax标记中,但我尝试了“change”和“valueChange”)。

共有1个答案

詹弘毅
2023-03-14

你所有的<代码>

#{addPersonBean}放在视图范围中,并确保您没有在getter/setter中执行业务逻辑,应该可以解决这个问题。

  • 命令按钮/命令链接/ajax操作/侦听器方法未调用或输入值未更新-第5点适用于您
  • 如何选择合适的bean范围?
 类似资料:
  • 主要内容:标签属性,示例,运行项目AJAX代表异步JavaScript和Xml。 这是一种使用JavaScript的HTTPXMLObject技术来将数据发送到服务器并从服务器异步接收数据。 在Ajax中,Javascript代码与服务器交换数据,更新网页的部分,而无需重新加载整个页面。 JSF支持使用标签进行Ajax调用。 下面显示了一个简单的JSF标签。 标签属性 属性 说明 disabled 如果为,则Ajax行为将应用于任

  • null 虽然我不能让cron在那个特定的容器中工作,但我能够为cron创建一个独立的docker容器,并成功地使它自动运行。 至于cron容器的设置,我遵循了链接的文章,使用Docker-Julien Boulay运行了一个cron作业,并且能够使其工作。

  • 我正试图将SpringSecurity5.1.4.RELEASE集成到一个已经在运行的JSF2.2-PrimeFaces6.1应用程序中,以实现安全性。当我尝试访问受保护的页面“logged.xhtml”时,spring会触发并将我带到登录页面“login.xhtml”,因此spring似乎工作正常。 问题是,一旦我配置了Spring,所有Primeface都停止工作(以及其他Primeface组

  • 我已经在MyEclipse Tomcat服务器中部署了我的应用程序,我在本地使用JDK 1.6配置了Apache -Tomcat 7.0.8。成功启动服务器后,我尝试在地址栏中输入本地主机网址。但是我没有得到回应。我试过了 但它被称为“HTTP 400错误请求”。我重新部署了应用程序,并通过重新启动服务器重试。 启动我的服务器后,控制台有 当我在浏览器中输入url时,我在控制台中没有找到任何日志。

  • 我已经从这里安装了一个Android Studio。它起作用了,我写了一个hello world项目,然后关闭了它。但IDE不会第二次启动。它会给我一个错误“缓存被锁定”。 我安装了unlocker,它说没有进程阻止这个文件夹。有人知道问题出在哪里吗?提前道谢。