Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF以编程方式呈现响应_Java_Jsf - Fatal编程技术网

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。