好的,这是我的问题:我有一个JSF应用程序和一些JSP文件。假设我有main.jsp,它有一个视图并包含sub.jsp。这很好用。 sub.jsp包含一个子视图。因此,sub.jsp中表单元素的所有ID都遵循“subview:component”的形式。现在假设我正在使用一些ajax并想要获取jsp页面sub.jsp并将其包含在某个DIV中。现在ID都是“组件”形式。我不知道如何解决这个问题,并且必须在我的交互式JavaScript中检查2组不同的ID是一件痛苦的事。有没有办法获得一致的ID?
我试过了: 删除子视图 - (然后AJAX调用将失败,因为没有找到视图)
和
h:form prependid = false - 这只删除了表单ID,而不是子视图ID
答案 0 :(得分:2)
AJAX与JSF相比很棘手。如果您使用的JSF框架不支持它,您将遇到许多视图状态问题。
我很惊讶当你直接解决 sub.jsp 时没有抛出异常 - 在 sub.jsp 中没有h:view而没有UIViewRoot ,我不确定如何创建UI树。如果你在 sub.jsp 中有一个h:view,那么你将两个UIViewRoot放入你的UI树中 - 这是一个bug。 (JSF组件树大致类似于其他Java小部件工具包,如Swing或SWT。)
我怀疑你观察到的问题是你正在提交与最初渲染的视图不同的视图。由于组件树完全不同,因此将从不同的视图根生成clientIds。您可以在this answer中了解它们的构建方式。
简而言之,我不认为您用于更新客户端的机制是有效的。
答案 1 :(得分:0)
你看过ajax4Jsf(又名Richfaces)吗?