[Tapestry4] 如何得到存放在src里的图片

eric2002cn 2008-02-27
开发一个自家义组件,组件中包含一些图片,因为要将该组件打成jar包,所以把图片放在src(class)下面,而不是放在webroot下面,怎样得到这些图片啊
看了DatePicker 是这样实现的,可是自己却无法实现
希望各位知道的告诉我一下好吗,谢谢了
tapestry 2008-02-28
src中放在同一个包里,eclipse自动编译到class中,再将class打包就可以了吧。
eric2002cn 2008-02-28
Tapestry 大哥误会我的意思了,我是说在组件的模板里如何让图片显示出来
把图片放在src下面,模板里只能显示是一个X号,无法显示,放在webroot下面就能显示出来,不知什么原因,我是又先要图片在模板里能正确显示,然后再打包的
不知怎么实现,请Tapestry大哥,还有各位知道的再给看一下,谢谢了!
我把代码贴出来吧
java类
public abstract class Pagenaction extends BaseComponent {

public abstract String getPreIcon();

public abstract String getNextIcon();

public abstract String getStartIcon();

public abstract String getEndIcon();

@Parameter(name = "model", required = true)
public abstract PageModel getPageModel();

public abstract void setPageModel(PageModel model);

@Parameter(name = "display", required = false, defaultValue = "ognl:false")
public abstract boolean getDisplay();

public int gotoNum = 0;

public void doPre() {
int i = (Integer) this.getPage().getRequestCycle()
.getListenerParameters()[0];
i--;
if (i >= 1) {
getPageModel().setCurrentPage(i);
trigger();
}

}

@Parameter(name = "listener", required = false)
public abstract IActionListener getListener();

public abstract ListenerInvoker getListenerInvoker();

public void trigger() {
IActionListener listener = getListener();

if (listener == null)
listener = getContainer().getListeners().getImplicitListener(this);

getListenerInvoker().invokeListener(listener, this,
this.getPage().getRequestCycle());
}

public void doFirst() {
if (getPageModel().getCurrentPage() != 1) {
getPageModel().setCurrentPage(1);
trigger();
}

}

public void doNext() {
// System.out.println("Pagenaction currentPage is -->"
// + getPageModel().getCurrentPage());
int i = (Integer) this.getPage().getRequestCycle()
.getListenerParameters()[0];
i++;
if (getPageModel().getCurrentPage() < getPageModel().getPageCount()) {
getPageModel().setCurrentPage(i);
trigger();
}
}

public void doLast() {
if (getPageModel().getCurrentPage() != getPageModel().getPageCount()) {
getPageModel().setCurrentPage(getPageModel().getPageCount());
trigger();
}
}

public void doGoto() {
System.out.println(gotoNum);
if (getPageModel().getCurrentPage() != gotoNum) {
if (gotoNum >= 1 && gotoNum <= getPageModel().getPageCount()) {
getPageModel().setCurrentPage(gotoNum);
trigger();
}
}
}

public int getGotoNum() {
return getPageModel().getCurrentPage();
}

public void setGotoNum(int gotoNum) {
this.gotoNum = gotoNum;
}

}
.jwc
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component-specification PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
<component-specification allow-informal-parameters="no"
    allow-body="no"
    class="com.snail.tapestry.components.Pagenaction">
    <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
    <parameter name="preIcon"   default-value="literal:/app?service=asset&path=/com/snail/tapestry/components/images/pre.gif" />
    <parameter name="nextIcon"  default-value="literal:/app?service=asset&path=/com/snail/tapestry/components/images/next.gif" />
    <parameter name="startIcon" default-value="literal:/app?service=asset&path=/com/snail/tapestry/components/images/start.gif" />
    <parameter name="endIcon"   default-value="literal:/app?service=asset&path=/com/snail/tapestry/components/images/end.gif" />
    </component-specification>

.html

<table style="width: 550px; height: 20px; background-color: #F0F0F0;">

<tr>

<td style="width: 100px; height: 20px;">
<span jwcid="@If" condition="ognl:pageModel.currentPage>1"> <a
jwcid="@DirectLink" listener="listener:doFirst">
<img jwcid="@Any" src="ognl:startIcon" /> </a> <a
jwcid="@DirectLink" listener="listener:doPre"
parameters="ognl:pageModel.currentPage"><img jwcid="@Any" src="ognl:preIcon" alt="上一页"/> </a> </span>
<span jwcid="@Else"> 首页 上一页 </span>

</td>

<td style="width: 100px; height: 20px;">
<span jwcid="@If"
condition="ognl:pageModel.pageCount>pageModel.currentPage"> <a
jwcid="@DirectLink" listener="listener:doNext"
parameters="ognl:pageModel.currentPage">
<img jwcid="@Any" src="ognl:nextIcon" /> </a>
<a jwcid="@DirectLink" listener="listener:doLast">
<img jwcid="@Any" src="ognl:endIcon" /> </a> </span>
<span jwcid="@Else"> 下一页 尾页 </span>

</td>
<td style="width: 200px; height: 20px;">

<span jwcid="@Insert" value="ognl:pageModel.pageCount"></span>页/
<span jwcid="@Insert" value="ognl:pageModel.rowCount"></span> 每页
<span jwcid="@Insert" value="ognl:pageModel.pageSize"></span>条/第
<span jwcid="@Insert" value="ognl:pageModel.currentPage"></span>页
</td>

<td>

</td>

<td style="width: 200px; height: 20px;">
<form jwcid="@Form" listener="listener:doGoto">
<input jwcid="@TextField" value="ognl:gotoNum" size="4" id="jumpNum" />

<input type="submit" value="转到" onclick="return check();">
</form>
</td>
</tr>
</table>




tapestry 2008-02-28
Often, a component must be packaged up with images, stylesheets or other resources (collectively termed "assets") that are needed at runtime. A reference to such an asset can be created using the <asset>  element of the page or component specification. For example:


  <asset name="logo" path="images/logo_200.png"/>
 
  <component id="image" type="Image">
    <binding name="image" value="asset:logo"/>
  </component>

In this case, if the component is packaged as /com/example/mylibrary/MyComponent.jwc, then the asset will be /com/examples/mylibrary/images/logo_200.png. Further, the asset path will be localized.
superaxis 2008-02-29
Java组件类中
@Asset("classpath:/corner/orm/tapestry/component/prototype/autocompleter/indicator.gif")
public abstract IAsset getIndicatorAsset();



然后通过
getIndicatorAsset().buildURL();


就能得到这个图片的URL.

Jun Tsai
eric2002cn 2008-02-29
问题解决了
谢谢,tapestry,superaxis两位大哥的热心帮助,再次感谢你们!!!
SilverRing 2008-03-19
你好eric2002cn,能不能把你的解决方案分享一下。我照着superaxis的方法用了,但是还是拿不到

@Asset("classpath:/component/1.gif")  
public abstract IAsset getTestImage();
	
public String getTestUrl() {
    return getTestImage().buildURL();
}


<img jwcid="@Any" src="ognl:testUrl" />
tapestry 2008-03-19
/component/1.gif
在classes文件或者在jar文件里

我记得有个context参数可以取得网站路径下的图片
@Asset("context:/images/1.gif")  
eric2002cn 2008-03-25
@Asset("classpath:/com/modules/components/images/pre.gif")
public abstract IAsset getDefaultPreIcon();

public IAsset getPreImageAsset() {

String url = getDefaultPreIcon().buildURL();

return new ExternalAsset(url, null);
}

这样就可以了
liziwen2008 2008-03-28
哇,真是高手如云啊。我是刚刚接触,以后还得多向各位大哥请教啊
Global site tag (gtag.js) - Google Analytics