struts2類型轉換

啊啊三這幾天的時間都在看書,看英語,做自己的wordpress的網站搭建,Domain買好了,但是找免費的空間真的很難找,而且適合自己的太難找了。外國的免費空間真的不少,但是國內的訪問速度真是不敢恭維呀,但是如果是買國內的付費空間也不是嫌貴,就是自己覺得,自己還是等等國外的空間域名綁定成功再看看吧,真的很不爽,時間用了這麼長時間了,還是沒有綁定好,心裏沒底啊!

       英語六級考完了,怎麼說呢,我感覺還是沒戲,不過這次應該是我大學裏面的最後一次六級了吧,我不能老是放不下,我現在是對看英語一點試題,做英語試題是一點興趣都沒有,但是我喜歡看自己不認識的單詞,喜歡看英語的API,喜歡翻譯,但是爲了做題,拿分而學英語不知道是不是一種悲哀。

       操作系統也還得看呀,我還有很多的任務沒有完成呀,自己也還有很多喜歡的事情很想做,但是又有很多自己不得不去做的事情,所以我的生活沒有別人過得那麼瀟灑哇!不過,沒關係,沒關係,珍惜時間就好,就好!

       關於struts2的類型轉換我早在一星期前就看了吧,由於很多的事情自己沒有實現,一直拖着,昨天又熬了個晚飯的時間還是沒有解決,今天總算解決掉了。我以前就說過,web的不好操作型,因爲有很多的配置文件,你稍微不留神就很容易出錯,而出錯了之後要想改正,又非常麻煩,因爲你不知道,怎麼樣進一步的排出錯誤,不過現在自己慢慢的慢慢的找到了線索,和c++和java一樣的,就是打印!靠着打印來找出錯的行徑。

       還是說說struts2的類型轉換吧,struts2的類型轉換解決的問題是,一些複雜的數據結構向對象的轉換,因爲轉換成對象,對於Action的處理就方便多了。而且是網頁的所有數據都是OGNL默認幫着處理的。而如果是複雜的數據的話,當然默認處理是處理不了的,所以就得你自己處理的。方法就是,先寫好,Typeconvertor類,其中Typeconvertor還是繼承DefaultTypeConverter比較好,裏面的默認繼承方法,你可以用alt + shift + S調出參數是三個的那個convertValue,三個參數分別爲context(環境具體的你運行我的程序看控制檯的輸出),Object value,就是你傳過來的參數,然後toType就是你想轉換成的類型。這些弄好之後你就編寫你的算法就行了,然後就是關於配置文件的說明了,參數的說明是這樣的,在action的文件內加以個,Actionname-conversion.properties的文件,裏面是一對key-class,key對應的是你的jsp傳過來的屬性名,也是你Action內接受的屬性名,當然這是局部設置,如果你要全局設置的話,那麼你的properties的文件就要放在WEB-INF/classes裏面,文件名xwork-conversion.properties。關於全局的我不介紹了,這裏只介紹局部的:

發出Action的JSP:

	<div>
  		<s:form action="queryproduct">
  			<s:textfield label="product1" name="product1"></s:textfield>
  			<!-- 這裏用label比較好,還自動給你加上“:” -->
  			<s:textfield label="product2" name="product2"></s:textfield>
  			<s:submit name="show" value="showdata"> </s:submit>
  		</s:form>
  	</div>

convertor類:


package chapter8.converter;

import java.util.Map;
import java.util.Map.Entry;

import chapter8.bean.Product;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class ProductConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		// TODO Auto-generated method stub
		for (Entry<String,Object> entry: context.entrySet()) {
			System.out.println("key________" + entry.getKey() + "++++++" + "class___" + entry.getValue());
		}
		System.out.println("asd");
		if (toType == Product.class) {
			System.out.println("What is the matter!?");
			String[] params = (String[])value;
			Product product = new Product();
			String[] productValues = params[0].split(",");
			product.setName(productValues[0].trim());
			product.setPrice(Integer.parseInt(productValues[1].trim()));
			System.out.println(product.getName());
			System.out.println(product.getPrice());
			return product;
		} else if (toType == String.class) {
			System.out.println("String????");
			Product product = (Product)value;
			String param = product.getName() + "," + product.getPrice();
			return param;
		}
		return null;
	}

	
}

convertor安裝文件,也就是properties文件:

product1 =chapter8.converter.ProductConverter
product2=chapter8.converter.ProductConverter

然後就是處理Action的class:

package chapter8.action;

import chapter8.bean.Product;

import com.opensymphony.xwork2.Action;

public class QueryProduct implements Action{
	private Product product1;
	private Product product2;
	
	public Product getProduct1() {
		System.out.println("getproduct1");
		return product1;
	}

	public void setProduct1(Product product1) {
		System.out.println("setproduct1");
		this.product1 = product1;
	}

	public Product getProduct2() {
		System.out.println("getproduct2");
		return product2;
	}

	public void setProduct2(Product product2) {
		System.out.println("setproduct2");
		this.product2 = product2;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
	
}

還有就是struts.xml配置的action:

<action name="queryproduct" class="chapter8.action.QueryProduct">
			<result name="success">
				/chapter8/showproduct.jsp
			</result>
		</action>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章