Skip to content

15. مثال ۱۲ – تبدیل‌ها و اعتبارسنجی‌های مختلف

برنامه جدید امکان وارد کردن عناصر مختلف با اعتبارسنج‌های Struts را فراهم می‌کند:

  • در [1]، فرم ورودی
  • به [2]، صفحه تأیید داده‌ها

این برنامه به روشی مشابه برنامه‌های قبلی کار می‌کند، بنابراین تنها به نکاتی که متفاوت هستند، اشاره خواهیم کرد.

15.1. پروژه NetBeans

پروژه NetBeans به شرح زیر است:

  • در [1]، نماهای برنامه
    • [Accueil.JSP]: صفحهٔ اصلی
    • [FormDivers.JSP]: فرم ورودی
    • [ConfirmationFormDivers.JSP]: صفحه تأیید
  • به [2]، فایل پیام [messages.properties] و فایل اصلی پیکربندی Struts
  • در [3]:
    • [FormDivers.java]: اکشنی که فرم را نمایش داده و پردازش می‌کند
    • [FormDivers-validation.xml]: قواعد اعتبارسنجی برای اکشن [FormDivers]. این فایل این اعتبارسنجی‌ها را به مدل واگذار می‌کند.
    • [FormDiversModel]: مدل برای اقدام [FormDivers]
    • [ FormDiversModel-validation.xml]: قواعد اعتبارسنجی برای مدل
    • [FormDiversModel.properties]: فایل پیام مدل
    • [example.xml]: فایل پیکربندی ثانویه Struts

15.2. پیکربندی پروژه

پروژه عمدتاً توسط فایل زیر پیکربندی می‌شود: [example.xml]:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
  <package name="example" namespace="/example" extends="struts-default">
    <action name="Accueil">
      <result name="success">/example/Accueil.JSP</result>
    </action>
    <action name="FormDivers" class="example.FormDivers">
      <result name="input">/example/FormDivers.JSP</result>
      <result name="cancel" type="redirect">/example/Accueil.JSP</result>
      <result name="success">/example/ConfirmationFormDivers.JSP</result>
    </action>
  </package>
</struts>

این مشابه مورد بررسی در نسخه‌های قبلی است.

15.3. فایل‌های پیام

فایل [messages.properties] به شرح زیر است:


Accueil.titre=Accueil
Accueil.message=Struts 2 - Conversions et validations
Accueil.FormDivers=Saisies diverses (email, URL, chaine de caract\u00e8res avec contr\u00f4le du nombre de caract\u00e8res)
Form.titre=Conversions et validations
FormDivers.message=Struts 2 - Conversions et validations de types divers
Form.submitText=Valider
Form.cancelText=Annuler
Form.clearModel=Raz mod\u00e8le
Confirmation.titre=Confirmation
Confirmation.message=Confirmation des valeurs saisies
Confirmation.champ=champ
Confirmation.valeur=valeur
Confirmation.lien=Formulaire de test
xwork.default.invalid.fieldvalue=Valeur invalide pour le champ "{0}".

فایل [FormDiversModel.properties] به شرح زیر است:


email.prompt=1-Tapez une adresse \u00E9lectronique (x@y.z)
email.error=Format invalide
URL.prompt=2-Tapez une URL (http://www.ibm.com)
URL.error=Format invalide
chaine.prompt=3-Tapez une chaine de 5 caract\u00E8res
chaine.error=Format invalide

15.4. فرم ورود داده

نما [FormDivers.JSP] به شرح زیر است:


<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
    <title><s:text name="Form.titre"/></title>
    <s:head/>
  </head>

  <body background="<s:url value="/ressources/standard.jpg"/>">
    <h2><s:text name="FormDivers.message"/></h2>
    <s:form name="formulaire" action="FormDivers">
      <s:textfield name="email" key="email.prompt" size="30"/>
      <s:textfield name="URL1" key="URL.prompt" size="30"/>
      <s:textfield name="chaine" key="chaine.prompt" size="10"/>
      <s:submit key="Form.submitText" method="execute"/>
    </s:form>
    <br/>
    <s:url id="URL" action="FormDivers" method="cancel"/>
    <s:a href="%{URL}"><s:text name="Form.cancelText"/></s:a>
      <br/>
    <s:url id="URL" action="FormDivers" method="clearModel"/>
    <s:a href="%{URL}"><s:text name="Form.clearModel"/></s:a>
  </body>
</html>

خطوط ۱۲ تا ۱۴ سه فیلد ورودی هستند.

15.5. صفحه تأیید

نمای تأیید [ConfirmationFormDivers.JSP] به شرح زیر است:


<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
    <title><s:text name="Confirmation.titre"/></title>
    <s:head/>
  </head>

  <body background="<s:url value="/ressources/standard.jpg"/>">
    <h2><s:text name="Confirmation.message"/></h2>
    <table border="1">
      <tr>
        <th><s:text name="Confirmation.champ"/></th>
        <th><s:text name="Confirmation.valeur"/></th>
      </tr>
      <tr>
        <td><s:text name="email.prompt"/></td>
        <td><s:text name="email"/></td>
      </tr>
      <tr>
        <td><s:text name="URL.prompt"/></td>
        <td><s:text name="URL1"/></td>
      </tr>
      <tr>
        <td><s:text name="chaine.prompt"/></td>
        <td><s:text name="chaine"/></td>
      </tr>
     </table>
    <br/>
    <s:url id="URL" action="FormDivers!input"/>
    <s:a href="%{URL}"><s:text name="Confirmation.lien"/></s:a>
  </body>
</html>

15.6. قالب [FormDiversModel]

میدان‌های ورودی فرم [FormDivers.JSP] در قالب زیر [FormDiversModel] درج می‌شوند:


package example;

public class FormDiversModel {

  // سازنده بدون پارامتر
  public FormDiversModel() {
  }
  
  // fields
  private String email;
  private String URL1 ;
  private String chaine;

    //پاک کردن مدل
  public void clearModel() {
    email = null;
    URL1 = null;
    chaine = null;
  }

  // گیرنده‌ها و تنظیم‌کننده‌ها
   ...
}

15.7. اعتبارسنجی قالب

اعتبارسنجی قالب توسط دو فایل کنترل می‌شود: [FormDivers-validation.xml] و [FormDiversModel-validation.xml].

فایل [FormDivers-validation.xml] اعتبارسنجی را به فایل زیر واگذار می‌کند: [FormDiversModel-validation.xml]:


<!--
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://localhost:8084/example-10/example/xwork-validator-1.0.2.dtd">

<validators>
  <field name="model" >
    <field-validator type="visitor">
      <param name="appendPrefix">false</param>
      <message/>
    </field-validator>
  </field>
</validators>

ما قبلاً با این فایل مواجه شده‌ایم.

فایل [FormDateModel-validation.xml] شامل قواعد اعتبارسنجی زیر است:


<!--
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//
EN" "http://localhost:8084/example-12/example/xwork-validator-1.0.2.dtd">

<validators>

  <field name="email" >
    <field-validator type="requiredstring" short-circuit="true">
      <message key="email.error"/>
    </field-validator>
    <field-validator type="email" short-circuit="true">
      <message key="email.error"/>
    </field-validator>
  </field>

  <field name="URL1" >
    <field-validator type="requiredstring" short-circuit="true">
      <message key="URL.error"/>
    </field-validator>
    <field-validator type="URL" short-circuit="true">
      <message key="URL.error"/>
    </field-validator>
  </field>

  <field name="chaine" >
    <field-validator type="requiredstring" short-circuit="true">
      <message key="chaine.error"/>
    </field-validator>
    <field-validator type="stringlength" short-circuit="true">
      <param name="minLength">5</param>
      <param name="maxLength">5</param>
      <message key="chaine.error"/>
    </field-validator>
  </field>

</validators>
  • خطوط ۱۱–۱۸: اعتبار فیلد email را بررسی کنید
  • خطوط ۱۵–۱۷: بررسی کنید که رشته email یک آدرس ایمیل معتبر است
  • خطوط ۲۰–۲۷: بررسی اعتبار فیلد URL1
  • خطوط ۲۴–۲۶: بررسی کنید که رشته URL1 یک URL معتبر است
  • خطوط ۲۹–۳۸: بررسی اعتبار فیلد chaine
  • خطوط ۳۳–۳۷: بررسی کنید که رشته chaine دقیقاً ۵ کاراکتر دارد.

15.8. اقدام [FormDivers]

عمل [FormDivers] به شرح زیر است:


package example;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.interceptor.validation.SkipValidation;

public class FormDivers extends ActionSupport implements ModelDriven, SessionAware {

  // سازنده بدون پارامتر
  public FormDivers() {
  }

  // مدل اقدام
  public Object getModel() {
    if (session.get("model") == null) {
      session.put("model", new FormDiversModel());
    }
    return session.get("model");
  }

  @SkipValidation
  public String clearModel() {
    // مدل پیش‌فرض
    ((FormDiversModel) getModel()).clearModel();
    // نتیجه
    return INPUT;
  }

  public String cancel() {
    //پاکسازی مدل
    ((FormDiversModel) getModel()).clearModel();
    // نتیجه
    return "cancel";
  }

  // SessionAware
  Map<String, Object> session;

  public void setSession(Map<String, Object> session) {
    this.session = session;
  }
}

عمل [FormDivers] بر اساس همان مدلی است که در عملیات‌های بررسی‌شده قبلی به کار رفته است. در اینجا، به سادگی هیچ متدی validate برای تکمیل اعتبارسنجی انجام‌شده توسط فایل [FormDiversModel-validation.xml] وجود ندارد.