【发布时间】:2013-02-18 16:02:25
【问题描述】:
我有 2 个 ui:repeat 像这样嵌套:
<ui:repeat var="father" value="#{miuchile3.getMenusPadre(miuchile3.keyModulo)}" >
<li>
<h:commandLink value="#{father.nombre}" action="#{miuchile3.setMenu(father)}">
<f:ajax render=":menupags:menuDetalle" />
</h:commandLink>
<ul>
<ui:repeat var="submenu" value="#{miuchile3.getHijos(father.id)}" >
<li><h:commandLink value="#{submenu.nombre}" actionListener="#{miuchile3.setMenu(submenu)}">
<f:ajax render=":menupags:menuDetalle" />
</h:commandLink></li>
</ui:repeat>
</ul>
</li>
</ui:repeat>
这会生成一个具有这种格式的菜单
-
父菜单 1
- 儿子 menu_1
- 儿子菜单_2
-
父菜单 2
- 子菜单2_1
- 子菜单2_2
- 子菜单2_3
等等。
当我点击这个子菜单时,我使用 f:ajax 来呈现一个面板组,其中包含所选菜单的详细信息(它显示与它们关联的页面),问题是它只适用于父菜单 1 及其子菜单,但是对于父菜单 2,它的第一个子菜单 2 可以正常工作,如果有第三个子菜单与“父菜单 2”相关联并且我点击它,它不会做任何事情。
我不确定嵌套的 ui:repeat 或 f:ajax 是否存在问题,但我认为 ui:repeat 在第二次迭代或类似情况后停止正常工作..“setMenu()”函数(在嵌套的 ui:repeat) 内因某种原因停止工作。但也可能是 f:ajax.. 我真的不知道。
编辑:
现在我发现了问题,但我还不知道如何解决。
问题在于,对于第一次迭代(第一个菜单及其子菜单),我在操作“setMenu()”中调用的方法可以正常工作,但对于第二次迭代(父菜单 2 及其子菜单),setMenu( ) 方法仅被调用 2 次,如果有超过 2 个子菜单,则我在操作中调用的方法 (setMenu()) 不起作用,我的意思是迭代有效,因为它打印了菜单和子菜单的所有名称,但第一次迭代后的操作仅适用于 2 个子菜单。
【问题讨论】:
-
只使用 action 而不是 actionListener 会发生同样的事情。实际上我只是更改为 actionListener 看看会发生什么。
-
if there is a third submenu associated我在这里只看到 2 次迭代,所以有两个子菜单,不是吗?事件是否被解雇?我的意思是,如果你放一个断点,它会通过它吗?如果没有,请按actionListener的顺序尝试action,并尝试更改操作方法名称,以避免IDE/服务器发布相关问题。 -
这个菜单只支持 2 个级别,这就是为什么只有 2 次迭代.. 我的问题不是菜单的生成.. 工作正常,问题是当我点击每个子菜单时它应该呈现它的详细信息,但它只适用于我的第一个菜单和子菜单,但是当我点击我的第二个父菜单的子菜单时,它会显示前 2 个子菜单的详细信息,但如果还有更多,它不会显示详细信息其他的..看看我在第一篇文章中描述的菜单格式..在那个模型中一切正常,除非我点击“son menu2_3”,没有任何反应。