0

我是新的支柱,我不确定我在这里缺少什么。当我提交此表单时,struts 操作类中的所有字段都为空。我添加了一个拦截器“adminHomeInterceptor”来检查用户是否是管理员,当我删除该拦截器引用时这工作正常。但是我必须检查所有请求用户是否是管理员,所以不能删除那个拦截器。任何帮助将不胜感激。

这是我的jsp。

    <s:form id="vendorRegister" action="addvendor" method="post" theme="simple">
        <label for="username" class="formLabel">Username/Email</label>
        <s:textfield name="userName" id="txtUname" cssClass="small ui-widget-content ui-corner-all" /><br />
        <label for="phone" class="formLabel">Phone</label>
        <s:textfield name="phone" id="txtPhone" cssClass="small ui-widget-content ui-corner-all" /><br />
        <label for="mobile" class="formLabel">Mobile</label>
        <s:textfield name="mobile" id="txtMobile" cssClass="small ui-widget-content ui-corner-all" /><br />
    <s:submit id="btnRegister" cssClass="button ui-state-default ui-corner-all" value="Add Vendor" />
</s:form>

这是一个动态加载的表单。

$("#btnRegister").live("click",(function(event){
    event.preventDefault();
    var uname = $( "#txtUname" ),
    phone =  $("#txtPhone"),
    mobile = $("#txtMobile"),   
    if ( // Validation Codes ) {
        $("#btnRegister").attr("disabled", true);
        var url = "../addvendor";
        $.post( url , $("#vendorRegister").serialize(), function(data){
            alert("inside");
        });
    }
}));

我的 Strust2 行动课

public class VendorAction extends ActionSupport{

    private int phone;
    private long mobile;
    private String userName;

    public int getPhone() {
         return phone;
    }
    public void setPhone(int phone) {
        this.phone = phone;
    }
    public long getMobile() {
        return mobile;
    }
    public void setMobile(long mobile) {
        this.mobile = mobile;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String recordVendor(){
        System.out.println(userName);
        System.out.println(mobile);
        return "success";
    }
}

这是我的 struts.xml 文件

     <package name="admin" namespace="/admin" extends="json-default">
    <interceptors>
        <interceptor name="adminHomeInterceptor" class="org.admin.interceptors.AdminHomeInterceptor" />
    </interceptors>
    <action name="addvendor" class="org.vendor.action.VendorAction" method="recordVendor">
        <interceptor-ref name="adminHomeInterceptor" />
        <result type="json" /> 
    </action>
</package>
4

2 回答 2

0

你在用struts2-json插件吗?如果你正在使用它。你必须包括

<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />  in struts.xml

并在包级别定义这样的结果类型 json

<result-type name="json" class="org.apache.struts2.json.JSONResult" default="false" /> 

否则,getter/setter 将无法与您通过 json 发送的 JSOn 一起使用。

于 2012-07-19T07:41:56.920 回答
0

您只为您的操作配置了一个拦截器,因此没有其他拦截器应用于请求。

<action name="addvendor" class="org.vendor.action.VendorAction" method="recordVendor">
  <interceptor-ref name="adminHomeInterceptor" />
  <result type="json" /> 
</action>

相反,您必须创建一个拦截器堆栈,然后为您的操作(或所有操作)引用它。

例子

<interceptors>
  <interceptor name="adminHomeInterceptor" class="org.admin.interceptors.AdminHomeInterceptor" />
  <interceptor-stack name="exampleDefaultStack">
    <interceptor-ref name="exception"/>
    <interceptor-ref name="adminHomeInterceptor"/>
    <interceptor-ref name="alias"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="i18n"/>
    <interceptor-ref name="prepare"/>
    <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">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
    </interceptor-ref>
    <interceptor-ref name="conversionError"/>
    <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>
</interceptors>

然后将interceptor-reffor 您的操作更改为:

<interceptor-ref name="exampleDefaultStack"/>

或者,您可以默认将此堆栈应用于所有操作,方法是在包部分中包含以下内容:

<default-interceptor-ref name="exampleDefaultStack"/>
于 2012-07-19T14:05:46.657 回答