【问题标题】:javascript popup does not get managed valuejavascript 弹出窗口没有获得托管值
【发布时间】:2011-01-07 22:18:42
【问题描述】:

我不明白,当我在下面的表单中按保存时,我保存了 inputTextArea 的当前内容,但是当我想查看 inputTextArea 内容的预览时,我看到了上次保存的邮件模板的内容。我应该看到的当然是 textArea 的当前值(转换后)。为什么不显示customMailTemplate的更新值?

<h:form id="gameMailForm" prependId="false" rendered="#{customizeGameMailBean.renderGameMailPanel}">
      <h:panelGrid columns="3">
      <h:inputTextarea
              styleClass="gameMailTextArea, textArea"
              id="gameMailTextArea"
              value="#{customizeGameMailBean.customMailTemplate}"
              converter="gameMailTemplateConverter"
              style="height: 120px; width: 300px; font-size: 11px;">
              <f:validator validatorId="gameMailValidator"/>
       </h:inputTextarea>
 <p:commandButton value="Save"
                  action="#{customizeGameMailBean.saveMailTemplate}"
                  ajax="false"/>
 <p:commandButton value="Preview"
                  ajax="true"
                  action="#{customizeGameMailBean.doNothing}"
                  oncomplete="javascript: window.open('gameMailPreview.jsp','Game Email','width=300,height=300')"
                  immediate="true"/>
</h:panelGrid>
</h:form>

gameMailPreview.jsp:

<%@page import="wmc.web.controller.CustomizeGameMailBean"%>
<%@page import="javax.faces.context.FacesContext"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<% CustomizeGameMailBean gameMailBean = (CustomizeGameMailBean) request.getSession().getAttribute("customizeGameMailBean");%>
<%=gameMailBean.getCustomMailPreview()%>

时间可能有问题吗?

顺便说一句,游戏 doNothing 真的什么都不做。它是一个空的 void 方法。

【问题讨论】:

  • 哎呀,为什么gameMailPreview.jsp 不是 JSF 页面?
  • 那是因为customMailPreview是html代码。我不知道如何在这样的jsf页面中放入html。
  • HTML 只允许在 JSF 页面中使用。只有在古老的 JSF 1.0 和 1.1 版本中,您需要做更多的事情,但在 JSF 1.2 和更新版本上应该不成问题,更不用说 JSF 2.0。
  • 我完全同意 BalusC。这里绝对不需要 JSP(实际上,在 JSF 应用程序中几乎不需要它)。在这种情况下,您输出的只是 customMailPreview,所以一个带有 ui:composition 和作为 body 的 h: output value="#{customizeGameMailBean.customMailPreview}" 和 escape="false" 的简单 Facelet 很可能会正常工作。

标签: java jsf jsf-2 primefaces


【解决方案1】:

问题在于第二个命令按钮的立即属性设置为真。这将导致在应用请求值阶段调用操作方法,然后立即跳过以呈现响应。

实际上,不会更新任何模型值,因此您会保留模型中的先前值。可能会令人困惑,但组件将保留您刚刚输入的值。我只是没有转移到模型。有关这方面的更多信息,请查看 immediate 属性在 JSF 中的含义,尤其是应用于命令按钮时的作用。

(我还想指出,使用会话范围向弹出窗口传达值是自找麻烦。当用户在多个选项卡中打开页面或windows。如果可能,最好使用 Java EE 6 的对话范围。)

【讨论】:

  • 我只希望弹出窗口显示预览。在弹出窗口中无法进行任何操作。将立即数改为 false 是不够的。
  • 应该够了,弹窗里能不能做点什么都无所谓。但要确保将 p:commandButton 更改为常规 h:commandButton 并且不要使用任何 ajax。在 customMailTemplate 的设置器中添加断点或 system.out.println。另外,什么代码负责创建 customMailPreview?它是 getter 从 customMailTemplate 动态创建的吗?
猜你喜欢
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2014-12-26
相关资源
最近更新 更多