【发布时间】:2019-09-08 19:49:40
【问题描述】:
我创建了一个动态子菜单。 当我点击这个动态子菜单时,我用 DAO 在里面创建了另一个动态子菜单,但是这个新的子菜单并没有出现并自动展开。它仅在我刷新页面时出现。怎么做才能让孩子的子菜单自动出现?
我尝试扩展 true、回调 bean、faces.update(clientID) 没有成功
我的 xhtml 文件带有带有绑定变量 classJS 的回调 bean
<script>
$(document).ready(function() {
$(".classJS").bind("click", function(e) {
var parent = document.getElementById(this.id).parentElement;
parent = parent.innerHTML;
var str = $(this).text()
var startPosition = parent.indexOf(str);
parent = parent.substring(startPosition-20);
parent = parent.split("-");
onCallBack( [ { name: 'Id', value: parent[1] } , { name: 'ClientId', value: this.id } ] );
});
});
<h:form id="formID">
<p:remoteCommand actionListener="#{structureOrganiqueBean.onCallBackFromJS}" name="onCallBack" style="display:none"></p:remoteCommand>
<p:panelMenu id="panelMenuId" model="#{structureOrganiqueBean.menuModel}" style="width:300px" ></p:panelMenu>
</h:form>
Mybean :
public void onCallBackFromJS() {
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> requestParamMap = context.getExternalContext().getRequestParameterMap();
String id = requestParamMap.get("Id");
DefaultSubMenu submenParent = (DefaultSubMenu)findComponent(id);
addSubMenuChildrenTo( submenParent);
}
public void addSubMenuChildrenTo(DefaultSubMenu parentmenuElement) {
Long idTechnique = getIDTechnique(parentmenuElement)
List<EntityStructureOrganique> entitesChildren = getFacade().getChildrenById(idTechnique);
for (EntityStructureOrganique entiteChild : entitesChildren) {
DefaultSubMenu childSubmenuitem = getDefaultSubMenu(entiteChild);
parentmenuElement.getElements().add(childSubmenuitem);
}
}
当我单击子菜单项 parentmenuElement 时,会回调用 addSubMenuChildrenTo。 addSubMenuChildren 向 parentmenuElement 添加新的子菜单。 我希望 parentmenuElement 扩展其新的子菜单
【问题讨论】:
-
嗨...您的问题中没有 jsf、primefaces、javabeans 或 facelets
-
至少在你的代码中没有
-
在我的代码中,否,但在我的项目中是。如果你需要更多,我可以放在这里。我是java新手。我还能给你什么?你能帮我吗?
-
您正在向组件树服务器端添加菜单元素。客户端(浏览器)对此一无所知。 panelMenu 组件必须重新渲染/更新。
标签: jsf primefaces javabeans facelets