0

私のJSPページには次のようなエントリがあります:

デモ.jsp:

<s:form action="demo" theme="simple">
  Enter the location and filename for template to be saved (eg: C:\temp\a.xml)
  <s:textfield name="fileLoation" id="FileLoationID" />
  <s:submit value="Save" method="saveTemplate" />
</s:form>

struts.xml:

<action name="demo" class="com.test.action.DemoAction" >
    <result name="preview">/jsp/demo/preview.jsp</result>
    <result name="save">/jsp/demo/demo.jsp</result>
    <result name="success">/jsp/demo/demo.jsp</result>
    <result name="error">/loginError.jsp</result>
</action>

アクション クラス:

public String saveTemplate() {

        try {
            previewTemplate();
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");            
            DOMSource source = (DOMSource) animalTemplateDetails.get("xmlStringDOMSource");         

            File file = new File(fileLoation);
            file.getParentFile().mkdirs();

            StreamResult result = new StreamResult(file);

            transformer.transform(source, result);

        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "save";
    }

現在のプロセス:

  1. 「C:/temp/abc.xml」のようなパスを指定しました
  2. [保存] をクリックします。
  3. アクション クラス メソッド saveTemplate() に移動し、ファイルを保存します。そして「保存」を返します
  4. 以降、同じページにリダイレクトされます<result name="save">/jsp/demo/demo.jsp</result>

私の要件:

  1. 「C:/temp/abc.xml」のようなパスを指定しました
  2. [保存] をクリックします。
  3. ページの更新がなければ、アクション クラス メソッドをヒットする必要がありsaveTemplate()ます。

実際に私はajaxで試しましたが、そのボタンは機能していません..

これは私がしたことです:

  1. 追加した<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
  2. 追加した<sx:head />
  3. この部分は私が混乱しています:私は試しました

(a)<s:submit value="Save" method="saveTemplate" theme="ajax" /> しかし、ここにエラーが表示されます:「FreeMarkerテンプレートエラー!Expression parameters.pushIdは、103行目、template/ajax/submit.ftlの6列目に未定義です。」

(b)<sx:submit value="Save" method="saveTemplate" />しかし、ここではボタンが機能していません。何も起こっていません。

誰でも助けることができますか?

4

1 に答える 1

0
<s:form action="demo" theme="simple" target="foo">
  Enter the location and filename for template to be saved (eg: C:\temp\a.xml)
  <s:textfield name="fileLoation" id="FileLoationID" />
  <s:submit value="save" method="saveTemplate" target="foo" />
</s:form>

<iframe style="display:none" name="foo">
   This is an hidden iframe targeted by the form to 
   avoid page refresh and new page / tab opening
</iframe>

また、アクションから NONE を返すことができます。

ところで、操作が正常に実行されたかどうかをユーザーに通知する必要があります。次に、iframe を使用して、ok または ko メッセージを含む JSP スニペットを受け取ります...

これは、ページを更新せずにアクションを呼び出すいくつかの方法の 1 つにすぎません。それはあなた次第です...

ただし、アクションのコードは、クライアントではなくサーバーで実行されます。

次に、パラダイムを変更する必要があります。content-disposition: attachment: を使用して Stream の結果を返す Action を使用します。これにより、ユーザーはファイルをダウンロードする場所を尋ねられます。

これも読んでください。

于 2013-06-13T11:44:30.933 に答える