Struts2-型変換

HTTPリクエストのすべては、として扱われます Stringプロトコルによって。これには、数値、ブール値、整数、日付、小数などが含まれます。ただし、Strutsクラスでは、任意のデータ型のプロパティを持つことができます。

Strutsはどのようにプロパティを自動配線しますか?

Struts カバーの下にさまざまなタイプのコンバーターを使用して、重い物を持ち上げます。

たとえば、Actionクラスに整数属性がある場合、Strutsは何もしなくてもリクエストパラメータを整数属性に自動的に変換します。デフォルトでは、Strutsにはいくつかのタイプコンバーターが付属しています

以下にリストされているコンバーターのいずれかを使用している場合は、心配する必要はありません。

  • 整数、浮動小数点、倍精度、10進数
  • 日付と日時
  • 配列とコレクション
  • Enumerations
  • Boolean
  • BigDecimal

独自のデータ型を使用している場合は、表示する前にStrutsにそれらの値を変換する方法を認識させるために、独自のコンバーターを追加する必要があります。次のPOJOクラスを検討してくださいEnvironment.java

package com.tutorialspoint.struts2;

public class Environment {
   private String name;
   
   public  Environment(String name) {
      this.name = name;
   }
   
   public String getName() {
      return name;
   }
   
   public void setName(String name) {
      this.name = name;
   }
}

これは、という属性を持つ非常に単純なクラスです。 name、このクラスについて特別なことは何もありません。システムに関する情報を含む別のクラスを作成しましょう-SystemDetails.java

この演習では、環境を「開発」に、オペレーティングシステムを「WindowsXPSP3」にハードコーディングしました。

リアルタイムプロジェクトでは、システム構成からこの情報を取得します。

次のアクションクラスを作成しましょう-

package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;

public class SystemDetails extends ActionSupport {
   private Environment environment = new Environment("Development");
   private String operatingSystem = "Windows XP SP3";

   public String execute() {
      return SUCCESS;
   }
   
   public Environment getEnvironment() {
      return environment;
   }
   
   public void setEnvironment(Environment environment) {
      this.environment = environment;
   }
   
   public String getOperatingSystem() {
      return operatingSystem;
   }
   
   public void setOperatingSystem(String operatingSystem) {
      this.operatingSystem = operatingSystem;
   }
}

次に、簡単なJSPファイルを作成しましょう System.jsp 環境とオペレーティングシステムの情報を表示します。

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>System Details</title>
   </head>
   
   <body>
      Environment: <s:property value = "environment"/><br/>
      Operating System:<s:property value = "operatingSystem"/>
   </body>
</html>

配線しましょう system.jsp そしてその SystemDetails.java 一緒にクラスを使用して struts.xml

SystemDetailsクラスには、文字列 "を返す単純なexecute()メソッドがあります。SUCCESS"。

<?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>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">
      
      <action name = "system" 
            class = "com.tutorialspoint.struts2.SystemDetails" 
            method = "execute">
         <result name = "success">/System.jsp</result>
      </action>
   </package>
</struts>
  • プロジェクト名を右クリックして、 Export > WAR File Warファイルを作成します。

  • 次に、このWARをTomcatのwebappsディレクトリにデプロイします。

  • 最後に、Tomcatサーバーを起動し、URLにアクセスしてみます http://localhost:8080/HelloWorldStruts2/system.action。これにより、次の画面が表示されます-

上記の出力の何が問題になっていますか?Strutsは、文字列「Windows XP SP3」およびその他の組み込みデータ型を表示および変換する方法を知っていますが、のプロパティをどう処理するかを知りません。Environmentタイプ。それは単に呼ばれますtoString() クラスのメソッド

この問題を解決するために、簡単なものを作成して登録しましょう TypeConverter Environmentクラスの場合。

というクラスを作成します EnvironmentConverter.java 以下で。

package com.tutorialspoint.struts2;

import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;

public class EnvironmentConverter extends StrutsTypeConverter {
   @Override
   public Object convertFromString(Map context, String[] values, Class clazz) {
      Environment env = new Environment(values[0]);
      return env;
   }

   @Override
   public String convertToString(Map context, Object value) {
      Environment env  = (Environment) value;
      return env == null ? null : env.getName();
   }	
}

ザ・ EnvironmentConverter 拡張します StrutsTypeConverter クラスとStrutsに、環境を文字列に変換する方法と、その逆の2つのメソッドをオーバーライドする方法を指示します。 convertFromString() そして convertToString()

アプリケーションで使用する前に、このコンバーターを登録しましょう。コンバータを登録する方法は2つあります。

コンバーターが特定のアクションでのみ使用される場合は、次の名前を付ける必要があるプロパティファイルを作成する必要があります。 '[action-class]'converstion.properties

この場合、というファイルを作成します SystemDetails-converstion.properties 次の登録エントリで-

environment = com.tutorialspoint.struts2.EnvironmentConverter

上記の例では、「environment」は内のプロパティの名前です。 SystemDetails.java クラスと私たちはStrutsに使用するように言っています EnvironmentConverter このプロパティとの間で変換するため。

ただし、これは行いません。代わりに、このコンバーターをグローバルに登録して、アプリケーション全体で使用できるようにします。これを行うには、というプロパティファイルを作成しますxwork-conversion.properties の中に WEBINF/classes 次の行のフォルダ

com.tutorialspoint.struts2.Environment = \
   com.tutorialspoint.struts2.EnvironmentConverter

これは単にコンバーターをグローバルに登録するので、 StrutsタイプEnvironmentのオブジェクトに遭遇するたびに、自動的に変換を実行できます。ここで、プログラムを再コンパイルして再実行すると、次のようにより良い出力が得られます。

明らかに、結果はより良くなります。これは、Strutsコンバーターが正常に機能していることを意味します。

これは、複数のコンバーターを作成し、要件に従って使用するためにそれらを登録する方法です。