首页 > 解决方案 > 使用 Struts2 约定插件,但从 URL 中的命名空间参数获取 NULL 值

问题描述

我创建了一个测试,我想通过带有“.../{token}/def”的操作 URL 获取令牌值。但是,为什么我成功进入action的时候action方法中的getToken却是print null。

有人可以给我一些建议吗?

testAction.java

package tw.com.test.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;

@Controller
@ParentPackage("ota2-default")
@Scope("prototype")
@Namespace("/testAction")
@InterceptorRef("modifiedDefaultStack")
public class TestAction extends ActionSupport{

  private String token;
  
  @Action(value="{token}/def", results={@Result(name=SUCCESS, type="redirect", location="test.htm")})
  public String test2() throws Exception {
    
    System.out.println(getToken());
    return SUCCESS;
  }

  public String getToken() {
  
    return token;
  }
  
  public void setToken(String token) {
  
    this.token = token;
  }
  
}

Struts.xml 设置

以下是关于测试的 sturts.xml 设置。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
  
  <constant name="struts.locale" value="zh_TW" />
  <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  <constant name="struts.devMode" value="false" />
  <constant name="struts.convention.classes.reload" value="true" />
  <!-- constant name="struts.convention.package.locators" value="com.caves"/-->
  <constant name="struts.convention.action.packages" value="action"/>
  <constant name="struts.convention.result.path" value="/WEB-INF/pages/"/>
  <constant name="struts.convention.action.suffix" value="Controller"/>
  <constant name="struts.convention.action.mapAllMatches" value="true"/>
  <constant name="struts.convention.default.parent.package" value="ota2-default"/>
  <constant name="struts.ui.theme" value="simple" />
  <constant name="struts.ognl.allowStaticMethodAccess" value="true" />
  <constant name="struts.custom.i18n.resources" value="package"/>
  
  <constant name="struts.enable.SlashesInActionNames" value="true"/>
  <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
  <constant name="struts.patternMatcher" value="regex"/> <!-- see http://struts.apache.org/release/2.3.x/docs/wildcard-mappings.html -->
  
  <package name="ota2-default" extends="struts-default">
   
    <interceptors>
      <interceptor-stack name="component">
        <interceptor-ref name="exception"/>
        <interceptor-ref name="prepare"/>
      </interceptor-stack>
      
      <interceptor-stack name="modifiedDefaultStack">
          <interceptor-ref name="exception"/>
          <interceptor-ref name="alias"/>
          <interceptor-ref name="servletConfig"/>
          <interceptor-ref name="i18n"/>
          <interceptor-ref name="chain"/>
          <interceptor-ref name="scopedModelDriven"/>
          <interceptor-ref name="modelDriven"/>
          <interceptor-ref name="fileUpload"/>
          <interceptor-ref name="checkbox"/>
          <interceptor-ref name="multiselect"/>
          <interceptor-ref name="staticParams"/>
          <interceptor-ref name="actionMappingParams"/>
          <interceptor-ref name="params">
              <param name="excludeParams">^action:.*,^method:.*</param>
              <param name="paramNameMaxLength">600</param>
          </interceptor-ref>
          <interceptor-ref name="prepare"/>
          <interceptor-ref name="conversionError"/>
          <!-- <interceptor-ref name="json"/> -->
          <interceptor-ref name="validation">
              <param name="excludeMethods">input,back,cancel,browse</param>
          </interceptor-ref>
          <interceptor-ref name="workflow">
              <param name="excludeMethods">input,back,cancel,browse</param>
          </interceptor-ref>
          <interceptor-ref name="debugging"/>
      </interceptor-stack>
      
      <interceptor-stack name="noneStack">
        <interceptor-ref name="i18n"/>
        <interceptor-ref name="chain"/>
      </interceptor-stack>
      
    </interceptors>
    
  </package>
  
</struts>

URL 测试示例

这是一个 URL 测试示例,我想从这个 URL 中获取“abc”值,然后在 Java 中从 getToken 中获取值。

http://127.0.0.1:8080/Ota2Abstract/testAction/abc/def

标签: javastruts2

解决方案


推荐阅读