p:dialog 不会隐藏在 HTML 中,直接呈现在页面上

p:dialog not hidden in html and directly rendered on page

提问人:David 提问时间:7/10/2019 最后编辑:KukeltjeDavid 更新时间:7/10/2019 访问量:446

问:

我有一个,它通常不会呈现在页面上,当我激活它时,它会在新窗口中显示为弹出窗口。p:dialog

<p:dialog id="dialogAdressvalidierung"
              header="Adresse auswählen"
              widgetVar="popupAdrValidierung"
              modal="true"
              draggable="true"
              showEffect=""
              hideEffect=""
              width="900"
              resizable="false"
              appendTo="@(body)">
    <!--dialogs content-->
</p:dialog>

html 输出通常是这样的

<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-hidden-container ui-draggable"
     id="dialogAdressvalidierung"
     role="dialog"
     aria-hidden="true"
     aria-labelledby="dialogAdressvalidierung_title"
     style="width: 900px; height: auto;">
     <!--content-->
</div>

但是,在一种情况下,我需要刷新服务器上的页面。

FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
context.renderResponse();

执行上面的 java 代码后,xhtml 文件中的所有对话框都显示在 html 中,页面看起来非常扭曲。一些属性,如元素的 和,由 不见了:aria-hidden="true"role="dialog"divp:dialog

<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-hidden-container"
     id="dialogAdressvalidierung">
    <!--content-->
</div>

为什么 p:dialog 的 html 输出不再隐藏?如何让对话框不显示在页面上,并且仅在激活时才弹出?

JSF 素面 JSF-2 XHTML

评论

3赞 Kukeltje 7/10/2019
为什么要以这种方式刷新服务器的页面?
0赞 David 7/31/2019
因为如果我不这样做,jsf 会生成重复的 id,就像这里讨论的那样:stackoverflow.com/questions/20543070/...,而且那里给出的解决方案对我的情况没有帮助。
0赞 Kukeltje 7/31/2019
您发布的链接仅提及在这种情况下由重复的 ajax 更新导致的“重复 id”错误。还有其他几篇关于重复 ID 的帖子都有不同的原因。因此,与其尝试修复由工作引起的问题,不如修复原始问题。你现在实际上遇到了一个 xyproblem.info。对于下一个问题/评论,请阅读 idownvotedbecau.se/beingunresponsive(我还没有投反对票)
0赞 David 7/31/2019
哦,我不知道,有这么多不同原因的重复 ID 问题。谢谢你的信息。我没有意识到页面刷新是一种解决方法,因为它已经深入到我正在处理的程序中,以至于它经常从程序的许多部分调用。所以我认为这就是使用 jsf 的方式。因此,问题中描述的问题似乎与我想象的不同。不知道现在如何处理这个线程...

答: 暂无答案