Image GWT AbstractCell-使用URL呈现图像并包含错误处理程序?
GWT的AbstractCell允许您创建自定义单元格,包括在单元格中渲染图像的功能。有没有一种方法可以通过设置图像的URL属性来呈现图像,并且有一个与之关联的错误处理程序(在图像资源不可用或加载有问题时采取措施)?在测试图像属性时,正确渲染,但似乎没有包含错误处理程序 下面是我尝试使用的示例代码:Image GWT AbstractCell-使用URL呈现图像并包含错误处理程序?,image,gwt,grid,Image,Gwt,Grid,GWT的AbstractCell允许您创建自定义单元格,包括在单元格中渲染图像的功能。有没有一种方法可以通过设置图像的URL属性来呈现图像,并且有一个与之关联的错误处理程序(在图像资源不可用或加载有问题时采取措施)?在测试图像属性时,正确渲染,但似乎没有包含错误处理程序 下面是我尝试使用的示例代码: new AbstractCell<String>() { @Override public void render (Context context, String value,
new AbstractCell<String>() {
@Override
public void render (Context context, String value, final SafeHtmlBuilder sb) {
final Image testImage = new Image();
testImage.addErrorHandler(new ErrorHandler() {
@Override
public void onError(ErrorEvent event) {
// image SRC failed to load so pick a different image and set the tool tip
testImage.setResource(images.errorLoading()); // from an image bundle
testImage.setTitle("Image Load Failed");
}
});
// the value passed in is the image src
testImage.setUrl(value);
sb.append(SafeHtmlUtils.fromTrustedString(testImage.toString()));
}
newAbstractCell(){
@凌驾
公共void呈现(上下文上下文、字符串值、最终安全HtmlBuilder sb){
最终图像测试图像=新图像();
testImage.addErrorHandler(新的ErrorHandler(){
@凌驾
公共无效onError(错误事件){
//图像SRC加载失败,因此请选择其他图像并设置工具提示
testImage.setResource(images.errorLoading());//来自图像包
testImage.setTitle(“图像加载失败”);
}
});
//传入的值是图像src
testImage.setUrl(值);
sb.append(SafeHtmlUtils.fromTrustedString(testImage.toString());
}
我认为问题在于testImage.toString()
。要实现AbstractCell,必须将其附加到SafeHtmlBuilder。在图像上使用toString()
方法时,图像URL设置正确,其他属性设置正确,但toString()中不包含错误处理程序
method(据我所知)。还有其他方法吗?testImage.toString()
方法创建一个简单的HTML字符串,该字符串在单元格中呈现。此HTML中没有处理程序
您可以在render()
方法之外设置testImage的URL。给浏览器加载图像的时间(您可能必须使用调度程序)。然后刷新/绘制单元格小部件。不过,我不确定用户是否希望在加载完所有图像之前出现延迟
请考虑改用ImageLoadingCell。我无法在render方法之外设置URL,因为抽象单元格正在插入网格中,传递到单元格中的字符串值表示图像URL(每行都是动态的)。我也看过ImageLoadingCell,但我不认为这在这种情况下对我有什么帮助(它最终要求我将图像作为捆绑包的一部分(在这种情况下不可能,因为图像是基于传入的URL每行加载的)。除非我遗漏了什么?您可以在render()之外设置URL)方法,但我建议使用ImageCell或ImageLoadingCell。这些单元格正是您想要做的:它们通过其URL显示图像(与ImageResourceCell不同)。然后,如果无法加载所需的图像,您可以覆盖单元格中的
onBrowserEvent
方法以显示错误图像/消息。通常,您不需要在网格的每一行中设置处理程序:您只需要覆盖单元格本身中的方法(即getValue
,update
,onBrowserEvent
,等等)您能否提供一个示例,说明如何在render()之外设置URL
method?正如我所说,单元格将进入网格,因此在构建网格之前,我不知道或无法访问图像URL。此外,我也找不到一个关于如何使用图像设置ImageLoadingCell并指定URL的好例子。我会添加onBrowserEvent
方法,但找不到好的示例使用其中一个单元格而不是抽象单元格的方法。