0

私は新しいストラットであり、ここで何が欠けているのかわかりません。このフォームを送信すると、Struts アクション クラスのすべてのフィールドが null になります。ユーザーが管理者であるかどうかを確認するために、インターセプター「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 に対して 1 つのインターセプターのみを構成したため、他のインターセプターは要求に適用されません。

<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-ref、アクションを次のように変更します。

<interceptor-ref name="exampleDefaultStack"/>

または、package セクションに以下を含めることで、デフォルトでこのスタックをすべてのアクションに適用できます。

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