【问题标题】:accessing javascript through java in jsp在jsp中通过java访问javascript
【发布时间】:2011-04-17 20:38:20
【问题描述】:

我的代码目前看起来像这样

<%
    if (request != null) {
        bustOut;
    }
%>

<script language="javascript">
function bustOut(){
   var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
}
</script>

如何在 Java 代码中调用 javascript 函数?还是不可能?

【问题讨论】:

    标签: java javascript jsp


    【解决方案1】:

    JSP 在网络服务器上运行,并根据网络浏览器请求生成/生成 HTML/CSS/JS 代码。网络服务器将 HTML/CSS/JS 发送到网络浏览器。网络浏览器运行 HTML/CSS/JS。因此,您只需要让 JSP 将其按字面意思打印为 JS 代码即可。

    <script language="javascript">
        function bustOut(){
           var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
        }
        <% 
            if (foo != null) { 
                out.print("bustOut();");
            }
        %>
    </script>
    

    或者,better,带 EL

    <script language="javascript">
        function bustOut(){
           var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
        }
        ${not empty foo ? 'bustOut();' : ''}
    </script>
    

    (请注意,我将属性名称更改为foo,因为request 代表HttpServletRequest,这可能会使其他人感到困惑,因为这永远不是null

    无论哪种方式,当条件为真时,生成的 HTML(您应该通过在浏览器中打开页面,右键单击它并选择查看源代码来看到)应该如下所示:

    <script language="javascript">
        function bustOut(){
           var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
        }
        bustOut();
    </script>
    

    它现在会打开你头顶上的灯泡吗?

    【讨论】:

      【解决方案2】:

      你不能从java调用javascript函数

      您的 java 代码在服务器上执行,而 javascript - 在客户端上执行。

      您似乎需要有条件地在文档加载时打开一个新窗口。为此:

      <c:if test="${shouldDisplayWindow}">
           $(document).ready(function() {
               bustOut();
           });
      </c:if>
      

      (上面是用于检测文档负载的 jQuery。您可以将其替换为纯 javascript - window.onload = function() {..}document.onload = function() {..} 我认为)

      请注意,request != null 是无意义的条件 - JSP 中的请求永远不会是 null

      最后 - 使用 jstl 标签(就像我展示的那样)而不是 java 代码(scriptlet)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-09
        • 2021-08-23
        • 2012-10-03
        相关资源
        最近更新 更多