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

primefaces 3.2 menuItem bean变量未在操作上设置

越健
2023-03-14

我有一个xhtml页面,其中包含primefaces的菜单和选项卡控件(带有datatable)。datatable根据“type”变量(在bean中)获取值。单击每个菜单项,就会触发一个操作(onType(“param”)),并在bean中设置类型变量(如下所示)。但是现在,当我在tabView中选择一个选项卡时,类型变量再次设置为null。为什么会发生这种情况。

xhtml代码:

    <h:form id="frm">
  <p:menu>
    <p:menuitem value="price losers" action='#{equityBean.onType("losers")}'/>
    <p:menuitem  value="price gainers"/>
    <p:menuitem  value="price volume"/>
  </p:menu>
  <p:tabView activeIndex="#{equityBean.activeIndex}">
    <p:ajax event="tabChange" listener="#{equityBean.onChange}" update=":frm"/>
    <p:tab title="NSE">                   

      <p:dataTable value="#{equityBean.scripList}" var="scrip">
        ....                        
      </p:dataTable>
    </p:tab>
    <p:tab title="BSE">
      <p:dataTable value="#{equityBean.scripList}" var="scrip">
        .....
      </p:dataTable>
    </p:tab>
  </p:tabView>
</h:form>

bean代码:

public void onType(String type)
{
    this.type=type;
}

public void onChange(TabChangeEvent event) {
    exchange=event.getTab().getTitle();
}
   public List<MasterScrip> getScripList() {
      if(type!=null)
      {
       if(type.equalsIgnoreCase("losers"))
       {
        scripList=new ArrayList<MasterScrip> ();
     scripList=getScripByPriceLosers(exchange);
        return scripList;
       }
       else if(type.equalsIgnoreCase("gainers"))
       {
        scripList=new ArrayList<MasterScrip> ();
     scripList=getScripByPriceLosers(exchange);
        return scripList;
       }
       else
       {
           scripList=new ArrayList<MasterScrip> ();
     scripList=getScripByVolumeType(exchange);
       return scripList;
       }
      }
      else
      {
          scripList=new ArrayList<MasterScrip> ();
     scripList=getScripByVolumeType(exchange);
       return scripList;
      }
    }

我哪里做错了?

编辑(web.xml):

    <context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>true</param-value>
</context-param>

共有1个答案

符允晨
2023-03-14

声明为@ViewScoped的bean有时行为类似于@RequestScopedbean,并在每次请求或回发时重新创建。原因在这篇优秀的博文中有描述:@ViewScoped在标记处理程序中失败。

在参考文章中,列出了一些可能的解决方案。您还可以将该值保存在会话范围中,并且只将其注入到视图/请求范围的bean中。

 类似资料:
  • 我想在MAC OS上设置PENTAHO\u JAVA\u HOME变量。我怎样才能做到这一点。我不熟悉MAC OS。 我在windows上关注以下内容: > 单击高级系统设置。系统属性窗口出现。 在系统属性窗口中,单击高级选项卡,然后单击环境变量。 要设置PENTAHO_JAVA_HOME变量,请执行此操作。 a) 在系统变量部分,单击新建。b) 在出现的窗口中,在名称字段中键入PENTAHO\u

  • 我使用的是swing,有一个函数(CreateAndShowGUI())可以监听上、左、右键的按下 现在,当我运行程序并按下任意键(向上、向左、向右、向下)时,我可以看到按下的键变量被设置为True。但当我试图在main中访问相同的内容时,按下的这个键的值为false。谁能帮我找出我错的地方吗?

  • 问题内容: 我在下面的代码中只想设置一个环境变量: 运行此文件: 该调用可以正确打印,但是随后我希望在会话中也设置此env变量,但是: 什么都没有,它是空的。这是预期的行为吗?如果是这样,我如何使这个env变量在我的会话中保持不变,并使用类似这样的程序对其进行设置? 问题答案: 创建新流程时,将复制父流程的环境。在新流程中对环境所做的更改不会影响父流程。修改环境后,您必须让程序启动Shell。

  • 问题内容: 我在运行show时有一个file.sh:未设置TERM环境变量。 问题答案: 您可以看到它是否真的没有 设置 。运行命令。 如果没有,则可以这样设置:

  • 问题内容: 在OS X中修改环境变量(如PATH)的正确方法是什么? 我稍微看了一下Google,发现需要编辑三个不同的文件: /etc/paths 〜/ .profile 〜/ .tcshrc 我什至没有这些文件,而且我很确定.tcshrc是错误的,因为OS X现在使用bash。这些变量(尤其是PATH)在哪里定义? 我正在运行OS X v10.5(Leopard)。 问题答案: 布鲁诺是正确的

  • 问题内容: 我试图设置一个变量,该变量位于该闭包内部的闭包外部,但最终不会被设置。然而,我设置变量的值 是 正在打印到控制台。同样,在设置返回变量并自行打印之后,将正确的值打印到控制台。当我返回变量时就会出现问题。其值与初始化时的值相同。这是一些伪代码: 这是不起作用的实际代码: 问题答案: .observeSingleEvent正在异步工作。 您可以执行以下操作: 然后,您可以在任何需要的地方使