<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vikings

    T3 里的圖片顯示

    例子參考:
    T3自帶的workbeanch里有
    1.ChartService class
    2.ChartAsset class
    3.IChartProvider的例子代碼

    思路:
    因為在DAO,service里返回的Info對象里已經有圖片的屬性,
    類型是byte[]
    所以直接out.write(byte[])獲得圖片.

    題外:
    其中,AbstractService相比T4少了Webresponse屬性,
    不可以直接在IChartProvider里定義 
    public void sendDynaAsset(WebResponse response);
    然后在實現類里用這句 
    OutputStream out = response.getOutputStream(new ContentType("image/jpeg"));
    來操作out.write .
    T3里都在AbstractService里操作out, service()方法里就有參數ResponseOutputStream output

    代碼:
    1. ChartService
    public class ChartService extends AbstractService{

      
    public void service(
            IEngineServiceView engine,
            IRequestCycle cycle,
            ResponseOutputStream output)
            
    throws ServletException, IOException
        
    {

    .

      
    try
            
    {
                IChartProvider provider 
    = (IChartProvider) component;

                
    byte[] bytes = provider.getImageBytes();

                
    //默認規則,page頁面里若數據庫里沒有bytes,則返回null
                if (bytes==null)
                    
    //顯示默認圖片
                    bytes = drawDefaultImage();         
                
                output.setContentType(
    "image/jpeg");

                
    // I've seen a few bits of wierdness (including a JVM crash) inside this code.
                
    // Hopefully, its a multi-threading problem that can be resolved
                
    // by synchronizing.

                
    synchronized (this)
                
    {
                    output.write(bytes);
                }

            }


       }


    protected byte[] drawDefaultImage() {
            
    int width = 102, height = 126;
            BufferedImage image 
    = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics g 
    = image.getGraphics();

            g.setColor(Color.WHITE);
            g.fillRect(
    00, width, height);

            g.setColor(Color.RED);
            g.setFont(
    new Font("Default", Font.PLAIN, 22));
            g.drawString(
    "暫無照片"10, height / 2 - 10);

            
    byte buffer[] = null;
            
    try {
                ByteArrayOutputStream out 
    = new ByteArrayOutputStream();
                ImageIO.write(image, 
    "JPEG", out);
                buffer 
    = out.toByteArray();
            }
     catch (Exception e) {
                log.info(
    "繪制默認圖片失敗");
            }

            
    return buffer;
        }

    }


    2. ChartAsset
    與workbeanch里的CharAsset一樣,沒有任何增刪
    public class ChartAsset extends AbstractAsset{
      
    private IEngineService _chartService;
      
    private IComponent _chartProvider;
     
    public ChartAsset(IRequestCycle cycle, IComponent chartProvider)
        
    {
            
    super(nullnull);
            
            IEngine engine 
    = cycle.getEngine();

            _chartService 
    = engine.getService(ChartService.SERVICE_NAME);
            _chartProvider 
    = chartProvider;
        }


    }

    3. IChartProvider
    Service類回調接口
    public interface IChartProvider
    {
        
    public byte[] getImageBytes();
    }


    4.Page類
    需要實現IChartProvider回調接口的getImageBytes()方法
    public abstract SaryPage extends BasePage implements IChartProvider{
     
    private IAsset chartImageAsset;

        
    public IAsset getChartImageAsset() {
            
    if (chartImageAsset == null)
                chartImageAsset 
    = new ChartAsset(getRequestCycle(), this);

            
    return chartImageAsset;
        }

     
    /**
         * This method is invoked by the service (in a seperate request cycle from
         * all the form handling stuff). The {
    @link #getChartImageAsset()} method
         * provides an {
    @link IAsset} that is handled by the {@link ChartService},
         * and the asset encodes the identity of this page.
         * 
         
    */

        
    public byte[] getImageBytes() {
            
    if (getSary().getXp()!=null)
                
    return getSary().getXp();
            
    else
                
    //默認規則,page頁面里若數據庫里沒有bytes,則返回null
                return null;
        }


    }


    5.  Html頁面
    <img jwcid="@Image" width="102" height="126"  image="ognl:chartImageAsset"/>

    6. .application文件 注冊ChartService
    <application name="SaryProject" engine-class="cn.vikings.tapestry.common.SaryEngine">
        
     
    <service name="chart" class="cn.vikings.tapestry.common.chart.ChartService"/>

    </application>

    圖片顯示搞店. 就這么簡單.
    不用再很BT得傳一句HQL語句和圖片ID來,再用JDBC查一次數據庫.

    posted on 2007-10-29 16:56 Vikings 閱讀(695) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久精品成人免费看| 无码AV动漫精品一区二区免费| 人人狠狠综合久久亚洲88| 黑人精品videos亚洲人| 亚洲jjzzjjzz在线播放| 亚洲av乱码中文一区二区三区| 免费精品国自产拍在线播放| 99re免费99re在线视频手机版| 24小时免费直播在线观看| 亚洲国产成人久久笫一页| 亚洲精品欧洲精品| 九九九国产精品成人免费视频| 精品无码人妻一区二区免费蜜桃 | 国产婷婷综合丁香亚洲欧洲| 国产一区二区三区亚洲综合| 日本免费一区二区三区四区五六区| 亚洲AV午夜成人片| 国产产在线精品亚洲AAVV| 国产青草视频免费观看97| 久久亚洲私人国产精品| 国产综合成人亚洲区| 免费国产不卡午夜福在线| 亚洲午夜电影一区二区三区| 和老外3p爽粗大免费视频| 无码永久免费AV网站| 亚洲人成电影福利在线播放| 一级做a爰全过程免费视频毛片| 亚洲午夜无码久久久久| 一级特级女人18毛片免费视频| 国产亚洲真人做受在线观看| 在线永久免费的视频草莓| 亚洲一区综合在线播放| 歪歪漫画在线观看官网免费阅读| 国产精品亚洲五月天高清| 亚洲国产精品成人精品无码区在线 | 亚洲精品无码久久久久AV麻豆| 亚洲成a人片在线观看精品| 四虎国产精品免费久久影院| 亚洲欧美日韩综合久久久| 毛片在线免费视频| 亚洲免费日韩无码系列|