【问题标题】:How to call a Struts2 action from a JavaScript function?如何从 JavaScript 函数调用 Struts2 动作?
【发布时间】:2017-02-12 17:40:15
【问题描述】:

首先不知道有没有可能,所以看了很多帖子才问,如何从JavaScript函数中调用Struts2 action?

示例(表格):

http://www.simplecodestuffs.com/example-to-call-struts2-action-from-java-script
how to call method in action class in javascript using struts2 framework?
how to redirect to struts action from java script in struts 2?
How to call a method in Struts2 Action Class method with javascript
https://coderanch.com/t/533202/framework/Calling-Action-Class-javaScript-Struts
https://coderanch.com/t/530746/framework/call-method-action-class-Struts
https://coderanch.com/t/551141/framework/call-Struts-action-javascript-function

感谢您的帮助。

我把 Struts.xml 文件放在你可以看到 Struts2 动作的地方,把包含 de borrarPerfil() 的 javascriptFunctions.js 放在你可以看到我需要调用 Struts2 动作的地方

Struts.xml

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="registrar" extends="struts-default">
    <action name="registrar" class="registrar.action.Registrar"
        method="execute">
        <result name="success" type="redirect">/estructura/finRegistro.jsp
        </result>
        <result name="input" type="dispatcher">/estructura/registro.jsp</result>
    </action>
</package>

<package name="tiles" extends="struts-default">
    <result-types>
        <result-type name="tiles"
            class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>
    <action name="*Menu" method="{1}" class="tiles.action.MenuAction">
        <result name="inicio" type="tiles">inicio</result>
        <result name="quienes" type="tiles">quienes</result>
        <result name="servicios" type="tiles">servicios</result>
        <result name="donde" type="tiles">donde</result>
        <result name="contacto" type="tiles">contacto</result>
    </action>

    <action name="*Usuario" method="{1}" class="tiles.action.UsuarioAction">
        <result name="perfil" type="tiles">perfil</result>
        <result name="agenda" type="tiles">agenda</result>
        <result name="servicios" type="tiles">mservicios</result>
        <result name="consulta" type="tiles">consulta</result>
        <result name="ayuda" type="tiles">ayuda</result>
    </action>
</package>

<package name="contacto" extends="tiles">
    <action name="validar" class="validar.action.Validar" method="execute">
        <result name="success" type="tiles">finContacto</result>
        <result name="input" type="tiles">contacto</result>
    </action>
</package>

<package name="login" extends="tiles">
    <interceptors>
        <interceptor name="loginInterceptor" class="login.interceptor.LoginInterceptor">
        </interceptor>
        <interceptor-stack name="loginStack">
            <interceptor-ref name="loginInterceptor" />
            <interceptor-ref name="defaultStack" />
        </interceptor-stack>
    </interceptors>

    <!-- login action -->
    <action name="login" class="login.action.Login">
        <result name="input" type="tiles">inicio</result>
        <result name="success" type="tiles">usuarioLayout</result>
    </action>

    <!-- logout action -->
    <action name="logout" class="login.action.Login" method="logout">
        <result name="success" type="tiles">inicio</result>
    </action>

</package>

<package name="modificar" extends="tiles">
    <action name="modificar" class="modificar.action.Modificar" method="execute">
        <result name="success" type="tiles">finModificar</result>
        <result name="input" type="tiles">menuLayout</result>
    </action>
</package>

<package name="borrar" extends="titles">
    <action name="borrar" class="borrar.action.Borrar">
        <result name="success" type="tiles">inicio"</result>    
    </action>
</package>

javascriptFunctions.js

function borrarPerfil() {
    if(confirm("Are you sure to delete this profile?")){
        alert("deleted");
       //CALL STRUTS2 ACTION borrar 

    } else {
        alert("no paso nada");
     //CALL STRUTS2 ACTION logout   
    }   
}

【问题讨论】:

  • 不清楚您要求 Struts2 对映射到 url 的 http 调用做出什么反应。它可能会暴露一些您可以使用任何 http 客户端访问的 api。
  • 可以在js函数中获取一个表单,然后提交给一个action。似乎是什么问题?
  • 与从 JavaScript 调用任何后端函数的方式相同。目前尚不清楚您认为自己有什么具体问题。
  • 您好,感谢您的快速回答,但我不需要使用表格。今天有空就把代码放上来看看我需要什么。

标签: javascript java struts2


【解决方案1】:

最后,我解决了如何从 javascript 函数调用。应该是这样的:

javascriptFunctions.js

function borrarPerfil() {
    if(confirm("Are you sure to delete this profile?")){
        alert("deleted");
        window.location = "/Barcelona_Business_World_v2/borrar";
    } else {
        alert("no paso nada");
        window.location = "/Barcelona_Business_World_v2/logout";
    }   
}

我错了,因为我用 next 调用了 strut2 动作:

window.location = "${pageContext.request.contextPath}/logout";

我读到这是正确的做法,但我不知道为什么我的函数会失败。我将阅读有关 contextPath 的更多信息。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2019-01-07
    • 2018-08-15
    • 2012-07-04
    相关资源
    最近更新 更多