使用<;h:命令按钮>;在jsf中不能正常工作

使用<;h:命令按钮>;在jsf中不能正常工作,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,当我试图用h:commandButton发送一些值时。。。我在bean中收到空值 我的xhtml代码是: <p:commandButton action="#{favouriteAction.setFavourite}" value="Add as Favorite" rendered="#{favouriteBean.favouriteButton}"> <f:setPropertyActionListener target="#{favouriteAction.n

当我试图用h:commandButton发送一些值时。。。我在bean中收到空值

我的xhtml代码是:

  <p:commandButton action="#{favouriteAction.setFavourite}"  value="Add as Favorite" rendered="#{favouriteBean.favouriteButton}">
  <f:setPropertyActionListener target="#{favouriteAction.ngoID}" value="#{InsertDataDaoService.ngo_id}"></f:setPropertyActionListener> 
  </p:commandButton>    
在控制台中,我不能得到任何异常,我的o/p是

非政府组织id:0 非政府组织id:0


这是空的,它不会被传递

是否检查过InsertDataDaoService.ngo_id的值不为空? 尝试将其替换为常量值。工作正常吗?

在请求提交表单时评估
,而不是在请求显示表单时评估。因此,如果没有为该请求保留其值
{InsertDataDaoService.ngo_id}
,那么它将失败

您基本上有两种选择:

  • 确保为表单提交请求保留
    {InsertDataDaoService.ngo_id}
    。具体如何做到这一点取决于功能需求,这一点在问题中并不明确。但是一般来说,通过
    @ViewScoped
    {InsertDataDaoService}
    bean放在视图范围中,并确保您没有在getter方法中执行任何业务工作就足够了

  • @ManagedProperty
    替换

    <p:commandButton action="#{favouriteAction.setFavourite}" value="Add as Favorite" rendered="#{favouriteBean.favouriteButton}">
        <f:param name="ngoID" value="#{InsertDataDaoService.ngo_id}" />
    </p:commandButton>
    
    这样,在请求显示表单时将检索该值(并作为
    commandButton
    的JavaScript助手函数的一部分内联),而不是在请求提交表单时进行评估

  • 另见:

    FavoriteBean
    请求的范围是否已确定?它至少应该是视图范围,以使这个
    rendered=“#{favoriteBean.favoriteButton}”
    正常工作。这方面有很多问题。我在呈现命令按钮方面没有问题,即使在bean是请求作用域之后,它也能正确呈现。我的问题是使用commandbutton传递值……我在
    渲染的
    和按钮命令方面遇到了一些问题。按钮呈现为OK,但在还原视图阶段存在问题。在RestoreView上,JSF创建了新的请求bean,将
    FavoriteButton
    设置为false,看起来按钮没有呈现。我们这里发生了很多事情。可能根本没有创建
    setPropertyActionListener
    ,因为它位于未渲染组件中。在更新模型阶段,
    favoriteButton
    为true,并且按钮被正确渲染。但为时已晚:
    setPropertyActionListener
    丢失。我甚至尝试删除渲染选项,但没有用。@Peter:已调用该操作。因此,
    呈现的
    属性不是问题所在。
    <p:commandButton action="#{favouriteAction.setFavourite}" value="Add as Favorite" rendered="#{favouriteBean.favouriteButton}">
        <f:param name="ngoID" value="#{InsertDataDaoService.ngo_id}" />
    </p:commandButton>
    
    @ManagedProperty("#{param.ngoID}")
    private Integer ngoID;