Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
javascript弹出窗口未获取托管值_Java_Jsf_Jsf 2_Primefaces - Fatal编程技术网

javascript弹出窗口未获取托管值

javascript弹出窗口未获取托管值,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,我不明白,当我在下面的表单中按save时,我保存了InputExtArea的当前内容,但当我想查看InputExtArea内容的预览时,我看到了上次保存的邮件模板的内容。我应该看到的当然是textArea的当前值(转换后)。为什么不显示customMailTemplate的更新值 <h:form id="gameMailForm" prependId="false" rendered="#{customizeGameMailBean.renderGameMailPanel}">

我不明白,当我在下面的表单中按save时,我保存了InputExtArea的当前内容,但当我想查看InputExtArea内容的预览时,我看到了上次保存的邮件模板的内容。我应该看到的当然是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()%>

时间安排可能有问题吗


顺便说一句,什么都不做实际上什么都不做。这是一个空的void方法。

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

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


(我还想指出的是,使用会话作用域向弹出窗口传递值会带来麻烦。当用户在多个选项卡或窗口中打开页面时,这会打开各种竞争条件的大门。如果可能,您最好使用Java EE 6的会话作用域。)

Eek,为什么
gameMailPreview.jsp
不是JSF页面?这是因为customMailPreview是html代码。我不知道如何在这样的jsf页面中放入html。html只允许在jsf页面中使用。只有在古老的JSF1.0和1.1版本中,您需要做更多的工作,但在JSF1.2和更新的版本中,这不应该是一个问题,更不用说JSF2.0了。我完全同意BalusC的观点。这里绝对不需要JSP(实际上,JSF应用程序几乎不需要JSP)。在这种情况下,所有输出的都是customMailPreview,因此一个简单的Facelet,带有ui:composition和一个h:output value=“#{customizeGameMailBean.customMailPreview}”以及escape=“false”,很可能就可以工作了。我只希望弹出窗口显示预览。在弹出窗口中无法执行任何操作。仅将立即数更改为false是不够的,应该足够了,在弹出窗口中是否可以执行某些操作无关紧要。但是要确保将p:commandButton更改为常规的h:commandButton,并且不使用任何ajax。将断点或system.out.println添加到customMailTemplate的setter中。另外,什么代码负责创建customMailPreview?是getter从customMailTemplate动态创建的吗?