Java JSF以编程方式呈现响应
我有一个带有Java JSF以编程方式呈现响应,java,jsf,Java,Jsf,我有一个带有parentManagedBean(附加到会话范围)的父页面。单击此父页面上的按钮,会出现一个弹出窗口,其中包含一个childManagedBean(附加到请求范围) 现在,ChildManagedBean通过JSF的托管属性工具持有对parentManagedbean的引用。在这个弹出窗口中,用户选择一些填充大值对象的选项。我使用childManagedBean的托管属性将这个大对象的值设置为parentManagedBean的值 问题是-父页面显示一个链接,单击该链接会出现弹出窗
parentManagedBean
(附加到会话范围)的父页面。单击此父页面上的按钮,会出现一个弹出窗口,其中包含一个childManagedBean
(附加到请求范围)
现在,ChildManagedBean
通过JSF的托管属性工具持有对parentManaged
bean的引用。在这个弹出窗口中,用户选择一些填充大值对象的选项。我使用childManagedBean
的托管属性将这个大对象的值设置为parentManagedBean
的值
问题是-父页面显示一个链接,单击该链接会出现弹出窗口,选择弹出窗口后,弹出窗口消失,并将值设置为parentManaged
bean。到目前为止还不错,但是新设置的值需要出现在父页面上。这就是我被困的地方。当我在子托管bean中时,如何以编程方式呈现母版页/呈现页?是否有一种方法可以获取父页面的句柄并刷新它
注意:我使用的是JSF1.1
编辑-
在遵循javascript中“重新提交表单”的解决方案之后,我看到旧表单正在重新提交,这将覆盖我所有更改的值
编辑--
我现在发现的是——如果我发出GET请求,也就是说,在子窗口关闭后,如果我转到主窗口并再次按下地址上的enter键(我相信这会发出GET请求),更新的值将返回。
所以这里的要点是-如何使用javascript发出get请求,或者有没有更好的方法通过JSF来实现这一点?我也遇到过类似的情况,我用javascript刷新了父页面 儿童 当用户单击弹出窗口中的“保存”时,操作将通过POST提交给子级,这将更新父bean,然后使用一些javascript重新显示子页面:
window.opener.doRefresh();
window.close();
这给人一种错觉,当用户点击“保存”时,弹出窗口直接关闭。你可以在你的情况下使用类似的技巧
家长
function doRefresh()
{
if(document.forms[0].onsubmit)
{
document.forms[0].submit();
}
}
function openChild()
{
window.open("path_to_child.jsf","_blank","");
return false;
}
如果我记得很清楚,我无法使用location.reload
刷新页面。要么是因为reload
可能会重新提交一个旧表单,要么是因为它发出了一个GET请求,而JSF对此并不太喜欢。所以我提交了表格计划。这基本上达到了同样的效果
这个解决方案并不是一个优雅的杰作,但它对我很有效:)小心使用
document.forms[0]
。更喜欢document.formname
,因为一个文档可以有多个表单。非常感谢您的回复。我尝试了你解释的解决方案。不幸的是,我看到document.forms['name'].submit()实际上是在提交旧表单,因此无论我从子页面更新了什么值,都会被覆盖。还有其他技术吗?然后尝试使用window.location.reload
,我想它会发出GET请求。否则,您可以尝试使用第二个表单(内部没有控件),该表单仅用于刷新。发布第二个表单时,不会发送任何数据,因此不应覆盖更新的数据。但这真的很有意思,我甚至不知道它是否有效。我以前试过重新加载。。但没有起作用。Reload实际上询问我们是否要再次提交数据。。因为它是一个POST请求,所以IE理解它不是重新进入者。我将尝试你提到的第二种方法。“是的,你是对的,我对它感觉不好,听起来像是一个黑客。”ewernli,最后它与空表单黑客一起工作。这对我来说是一次很好的经历,尽管它看起来像是黑客。。我慢慢地开始思考,没有任何自定义组件库(比如Richfaces)的JSF1.1很难创建复杂的UI。