【问题标题】:<s:file> doesn't retain its value when validation failed in action using Struts 2<s:file> 在使用 Struts 2 验证失败时不保留其值
【发布时间】:2015-08-22 07:02:43
【问题描述】:

我在 jsp 中有一些字段,包括文件字段。当我提交表单时,如果某个字段的验证失败,在将其设置为ActionErrors 后,当响应返回到 JSP 时,所有字段都保留其值除了文件字段

我的代码:

<s:form autocomplete="off" action="carrier-profile" id="id_form_carrier" namespace="/usermgmt"
                enctype="multipart/form-data" method="POST">

<s:text name="txt.carrier.url"></s:text><span class="astrcs">*</span></label> <span>
                            <s:textfield type="text" name="carrier.carrierUrl" class="form-control" maxlength="255" tabindex="12"></s:textfield>


<s:file name="carrier.file" class="upload-input" id="imgInp" accept="image/*" tabindex="12"></s:file>
<s:submit/>

</s:form>

我的行动课:

public class CarrierProfileAction extends BaseSecureAction {

    private static final Logger LOG = LogManager.getLogger(CarrierProfileAction.class);

    /**
     * 
     */
    private static final long serialVersionUID = -7296331027656555878L;

    private static final String RESULT_CARRIER_SEARCH = "carrier-search";
    //  private static final String RESULT_LOGO_PREVIEW = "logo-preview";
    //  private static final String RESULT_LOGO_UPDATE = "logo-update";
    public static final String CARRIER_ID = "carrierId";
    public static final String CARRIER_ID_NBR = "carrierIdNbr";
    public static final String RECORD_MODE = "mode";

    private static final String IMAGE = "Image";

    private CarrierVO carrier = new CarrierVO();

    //  private File file;
    private Long carrierId;
    private Long carrierIdNbr;
    private Long selectedCarrier;
    private boolean imagePreviewToBeShown;
    private String mode;
    private byte[] imagePreview;

    private String userImageFileName = "";

    private boolean validImage;
    InputStream imageInputStream;


}

在上面的代码中,carrier 对象具有它的所有及其字段 getter setter。没有问题。 除文件外,所有其他字段name="carrier.xxx" 都保留。

【问题讨论】:

  • 您对此无能为力。出于安全/隐私原因,服务器无法预填充类型文件的输入。唯一的方法是留在页面上并使用 AJAX 提交表单。
  • 好的。我们可以使用 AJAX。谢谢

标签: ajax validation jsp struts2 struts2-jquery


【解决方案1】:

由于浏览器限制规则,您不能保留文件字段。但是你可以通过 Struts2 jQuery 插件来使用 Ajax

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
  <head>
    <sj:head/>
  </head>
  <body>
    <s:form autocomplete="off" action="carrier-profile" id="id_form_carrier" namespace="/usermgmt"
                enctype="multipart/form-data" method="POST">

      <s:text name="txt.carrier.url"></s:text><span class="astrcs">*</span></label> <span>
      <s:textfield type="text" name="carrier.carrierUrl" cssClass="form-control" maxlength="255" tabindex="12"></s:textfield>

      <s:file name="carrier.file" cssClass="upload-input" id="imgInp" accept="image/*" tabindex="12"></s:file>

      <sj:submit value="Submit" />
    </s:form>
  </body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-14
    • 2017-10-12
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多