<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)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 成年人网站在线免费观看| 亚洲国产成人超福利久久精品| 久久不见久久见中文字幕免费| 高清免费久久午夜精品 | 免费很黄无遮挡的视频毛片| 精品亚洲成a人片在线观看| 国产成人精品曰本亚洲79ren| 无码永久免费AV网站| a级毛片免费高清毛片视频| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲精品不卡视频| 亚洲第一中文字幕| 亚洲中文字幕无码日韩| 可以免费观看的一级毛片| 国产一卡2卡3卡4卡2021免费观看| 久久嫩草影院免费看夜色| 亚洲国产精品99久久久久久| 亚洲成亚洲乱码一二三四区软件| 四虎永久免费地址在线观看| 亚洲黄色免费网址| 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 在线看片v免费观看视频777| 黄色毛片视频免费| 亚洲人成日本在线观看| 精品亚洲永久免费精品| 五月天婷亚洲天综合网精品偷| 欧美a级成人网站免费| 一级成人a毛片免费播放| 国产JIZZ中国JIZZ免费看| 亚洲人成网亚洲欧洲无码| 亚洲字幕在线观看| 亚洲制服中文字幕第一区| 亚洲一区二区三区AV无码| 免费在线视频一区| 国产国产人免费人成免费视频 | 97视频免费观看2区| 91精品全国免费观看青青| 日亚毛片免费乱码不卡一区 | 日产久久强奸免费的看| 国产精品亚洲а∨无码播放不卡 | 亚洲&#228;v永久无码精品天堂久久 |