从JSP调用带有参数的Javascript函数

Calling a Javascript function with parameters from JSP

本文关键字:Javascript 函数 参数 JSP 调用      更新时间:2023-09-26

我有一个这样的表单…

<aui:form action="<%= generateRuleURL.toString() %>" name="rulesForm" method="post">
<aui:button-row>
<aui:button type="button" id="End" value="End"  />
<aui:button type="button" id="And" value="And" />
<aui:button type="button" id="Or" value="Or" />
</aui:button-row>
</aui:form>

在视图jsp文件中

和这样的JS…

document.getElementById( 'End' ).onclick = function()
{
    var x=document.forms["rulesForm"]["FirstRuleElement"].value;
    System.out.println("Prova : " + x);
    var y=document.forms["rulesForm"]["FirstRuleAttribute"].value;
    System.out.println("Prova : " + y);
    var z=document.forms["rulesForm"]["Operator"].value;
    System.out.println("Prova : " + z);
    alert("First name must be filled out");
    if (x==null || x=="" || y==null || y=="" || z==null || z=="")
    {
      alert("First name must be filled out");
      return false;
    }
    AUI().one("#<portlet:namespace/>rulesForm").action='<%= generateRuleURL.toString()%>';
    document.forms["rulesForm"].submit();
};

In submit.js file.

我应该怎么做才能从一个按钮调用这个方法,而其他按钮调用其他方法?我试了很多想法,但这不起作用。

例如

:

调用commonFunction js: onclick="commonFunction('End')"//End是作为参数传递的字符串

等等…没有结果!

谁能帮我一下这个?

有两种方法可以做到你想做的:

  1. 一种方法是把你的javascript代码在view.jsp和使用<portlet:namespace/>这样:

    <aui:script>
    document.getElementById('<portlet:namespace/>End').onclick = function()
    {
        var x=document.forms["<portlet:namespace/>rulesForm"]["<portlet:namespace/>FirstRuleElement"].value;
        System.out.println("Prova : " + x);
        var y=document.forms["<portlet:namespace/>rulesForm"]["<portlet:namespace/>FirstRuleAttribute"].value;
        System.out.println("Prova : " + y);
        var z=document.forms["<portlet:namespace/>rulesForm"]["<portlet:namespace/>Operator"].value;
        System.out.println("Prova : " + z);
        alert("First name must be filled out");
        if (x==null || x=="" || y==null || y=="" || z==null || z=="")
        {
          alert("First name must be filled out");
          return false;
        }
        AUI().one("#<portlet:namespace/>rulesForm").action='<%= generateRuleURL.toString()%>';
        document.forms["<portlet:namespace/>rulesForm"].submit();
    };
    </aui:script>
    

    我们需要使用<portlet:namespace/>,因为您正在使用liferay的aui标签,如<aui:form>,它将<portlet:namespace/>添加到nameid属性。
    此外,使用<portlet:namespace/>可以确保元素的idname属性不会与页面上的其他元素冲突,正如@OlafKock在他的评论中提到的。

  2. 另一种方法,如果你想使用javascript文件submit.js,然后在该文件中创建一个javascript function:

    function submitMyForm(portletNamespace) {
        var x=document.forms[portletNamespace + "rulesForm"][portletNamespace + "FirstRuleElement"].value;
        System.out.println("Prova : " + x);
        var y=document.forms[portletNamespace + "rulesForm"][portletNamespace + "FirstRuleAttribute"].value;
        System.out.println("Prova : " + y);
        var z=document.forms[portletNamespace + "rulesForm"][portletNamespace + "Operator"].value;
        System.out.println("Prova : " + z);
        alert("First name must be filled out");
        if (x==null || x=="" || y==null || y=="" || z==null || z=="")
        {
          alert("First name must be filled out");
          return false;
        }
        AUI().one("#<portlet:namespace/>rulesForm").action='<%= generateRuleURL.toString()%>';
        document.forms[portletNamespace + "rulesForm"].submit();
    }
    

    view.jsp调用这个函数:

    <aui:form action="<%= generateRuleURL.toString() %>" name="rulesForm" method="post">
        <aui:button-row>
            <aui:button type="button" id="End" value="End" onClick="submitMyForm('<portlet:namespace/>')" />
            <aui:button type="button" id="And" value="And" />
            <aui:button type="button" id="Or" value="Or" />
        </aui:button-row>
    </aui:form>
    

希望这能帮到你。