【问题标题】:Struts2 action with parameter is not working带参数的 Struts2 动作不起作用
【发布时间】:2016-07-30 05:52:31
【问题描述】:

我正在使用参数从 jQuery 调用 struts2 动作,但未调用动作方法。

但是如果我在没有参数的情况下调用该动作,那么它可以完美地工作。

调用动作:

$('#redemptionForm').attr('action','sendRedempOTP?pbCardNo='+cardNo+'&mobile='+mobileNumber+'&isSearchByMobileNoFlag='+searchByMobileNoFlag);

Struts2 动作细节:

<action name="sendRedempOTP" class="com.ndil.web.redemption.ViewGiftItemSlabsAction" 
      method="sendOTP">
            <interceptor-ref name="basicStack" />
            <result name="error">/jsp/balanceinquirymain2.jsp</result>
            <result>/jsp/balanceinquirymain2.jsp</result>       
</action>

动作类方法:

public String sendOTP() {   
        LOGGER.info("Send OTP called");

        String cardNumber = request.getParameter("pbCardNo");
        String mobile = request.getParameter("mobile");
        String isSearchByMobileNoFlag = request.getParameter("isSearchByMobileNoFlag");
}

当我调用此操作时,它不起作用。 我遇到了异常:

No configuration found for the specified action: 'login' in namespace:

这段代码有什么问题?

我的 JSP 页面:

<s:form action="#" validate="true" method="post" id="redemptionForm">

        <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td>
                    <table width="950" border="0" align="center" cellpadding="0" cellspacing="1" style="background-color: #999">
                        <tr>
                            <td style="background-color: #f1f1f1">
                                <table width="950" border="0" cellpadding="2" cellspacing="0" align="center">
                                    <tr align="center">
                                        <td class="fieldtxt" width="50%" align="right"><s:text name="redeem.cardNo" /></td>
                                        <td width="50%" align="left"><s:property value="giftRedemptionVO.pbCardNo" /></td>
                                    </tr>
                                    <tr align="center">
                                        <td class="fieldtxt" width="50%" align="right"><s:text name="redeem.mobileNo" /></td>
                                        <td width="50%" align="left"><s:property value="giftRedemptionVO.mobileNo" /></td>
                                    </tr>
                                    <tr id="custNameRow" align="center">
                                        <td class="fieldtxt" width="50%" align="right"><s:text name="redeem.total.available.shopping.value" /></td>
                                        <td width="50%" align="left"><s:property value="giftRedemptionVO.totalAvailableAmount" /></td>
                                    </tr>
                                </td>
                            </tr>
                        </table>

                        <td><s:submit value="Redeem(SendOTP)" cssClass="crt_btn" id="sendOtpButton" theme="simple"
                </td>
            </tr>   
        </table>
</s:form>   

【问题讨论】:

  • 请发布您的jsp代码。
  • 我看不到你的 Jquery 代码。
  • 我已经在上面提到了我是如何从 JSP 页面调用我的操作的。
  • 使用 $('#redemptionForm').attr('action','sendRedempOTP?pbCardNo='+cardNo.value()+'&mobile='+mobileNumber.value()+'&isSearchByMobileNoFlag= '+searchByMobileNoFlag.value());
  • 为什么login操作的配置会被记录?

标签: java jquery jsp http struts2


【解决方案1】:

Strust2 不使用这种方式获取参数。 你可以试试这个方法:

 public void execute() {  
     String name = super.getRequest().getParameter("pbCardNo");  
     System.out.println("name:" + name);  
 }

或者你可以试试这个方法:

private String pbCardNo;
public void setPbCardNod(String pbCardNo){}
public String getPbCardNod(){}

也许这样可以帮助你

【讨论】:

  • 我看到你有使用giftRedemptionVO这个实体,也许你应该添加那个代码:private GiftRedemptionVO giftRedemptionVO;以及 getter 和 setter 方法。它将注入到这个实体中,然后你可以使用它来获取你想要的参数
  • 公共无效执行()?
  • 这只是一个例子
  • 是的,但是由于execute()是Struts2的默认方法,而Struts2的方法总是返回字符串,所以写public void execute()会产生误导。只需编辑示例并返回 SUCCESS,而不是为不正确的代码辩护
【解决方案2】:
  1. 使用POST发送表单时,表单中的数据已经序列化,无需像GET中那样将值编码为QueryString参数;

  2. 始终使用带有 getterssetters 的私有属性来接收/公开数据,您几乎不需要从请求中读取;

    李>
  3. 您可能已将全局INPUT 结果映射到login 操作,并且它正在被触发。如果是这样,错误的原因有很多:

    • login 操作不存在
    • login 操作应仅针对凭据问题触发,而不是针对每个 INPUT 结果触发
    • 如果触发了INPUT结果,则说明你向页面发送了错误,所以需要仔细检查参数。 Read more on the INPUT result

【讨论】:

    【解决方案3】:

    为什么您使用 url 发送。 如果您能够进入javascript。 创建

    <s:hiddent id="test" name="test"/>
    
    $('#test').value("your value");
    
    String test;
    
    setTest
    getTest
    
    String cardNumber = getTest();
    

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2011-01-26
      • 2013-02-04
      • 1970-01-01
      • 2017-01-12
      • 2014-09-16
      相关资源
      最近更新 更多