【问题标题】:It does not work 'actionExpresion' in dynamic menu. PrimeFaces它在动态菜单中不起作用“actionExpression”。 PrimeFaces
【发布时间】:2012-05-30 12:52:51
【问题描述】:

我的代码是这样的:

<h:form>

<p:accordionPanel>
    <p:tab title="TAB 1">
    <h:panelGrid columns="2" cellpadding="10">
        <p:menu model="#{usuarioSesion.miMenu}" />
    </h:panelGrid>
    </p:tab>
    <p:tab title="TAB 2">
    <h:panelGrid columns="2" cellpadding="10">
            Ayuda
    </h:panelGrid>
    </p:tab>            
</p:accordionPanel>

</h:form>

我的托管 bean 是这样的:

@ManagedBean(name = "usuarioSesion")
@SessionScoped
public class UsuarioCtrl implements Serializable{

    private DefaultMenuModel miMenu;

    @SuppressWarnings("unused")
    @PostConstruct
    private void init(){
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application application = facesContext.getApplication();
        ExpressionFactory expressionFactory = application.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();

        miMenu = new DefaultMenuModel();
        Submenu submenu;
        submenu = new Submenu();
        submenu.setId("idCabecera");
        submenu.setLabel("Operaciones");

        MenuItem item = new MenuItem();
        item.setValue("Organismos");
        item.setId("idOrganismo");
        item.setActionExpression(expressionFactory.createMethodExpression(elContext, "#{usuarioSesion.listar2}", String.class, new Class[0]));
        item.setAjax(false);
        item.setAsync(false);
        submenu.getChildren().add(item);

        MenuItem item2 = new MenuItem();
        item2.setId("idAplicacion");
        item2.setValue("Aplicacion");
        item2.setActionExpression(expressionFactory.createMethodExpression(elContext, "#{usuarioSesion.listar1}", String.class, new Class[0]));
        item2.setAjax(false);
        item2.setAsync(false);
        submenu.getChildren().add(item2);

        miMenu.addSubmenu(submenu);

    }

    public String listar1(){
        .....
    }

    public String listar2(){
        .....
    }

当我单击菜单项运行此代码时,listar1(), listar2() 方法永远不会执行。

是什么原因?

但是使用此代码:

<h:form>
      <h:panelGrid columns="2" cellpadding="10">
         <p:menu model="#{usuarioSesion.miMenu}" />
   </h:panelGrid>
</h:form>

菜单运行良好。为什么???

谢谢

【问题讨论】:

  • 请添加您的 PF 和 JSF 版本。

标签: jsf-2 primefaces


【解决方案1】:

解决方法:我发现添加:

<h:panelGrid columns="2" cellpadding="10" style="display:none">
    <p:menu model="#{usuarioSesion.miMenu}" />
</h:panelGrid>

到您的表单,解决问题。最终的表单内容是:

<h:form>
<p:accordionPanel>
    <p:tab title="TAB 1">
    <h:panelGrid columns="2" cellpadding="10">
        <p:menu model="#{usuarioSesion.miMenu}" />
    </h:panelGrid>
    </p:tab>
    <p:tab title="TAB 2">
    <h:panelGrid columns="2" cellpadding="10">
            Ayuda
    </h:panelGrid>
    </p:tab>            
</p:accordionPanel>
<h:panelGrid columns="2" cellpadding="10" style="display:none">
    <p:menu model="#{usuarioSesion.miMenu}" />
</h:panelGrid>
</h:form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    相关资源
    最近更新 更多