Java 如何从字符串参数设置ZK中的图像内容

Java 如何从字符串参数设置ZK中的图像内容,java,zk,Java,Zk,需要帮助我想在下面的代码中设置url image from String参数,这是我从数据库中的表路径获得的,这是我的.zul代码: <div data-u="slides" apply="id.my.berkah.web.controller.ListTopController" style="cursor: default; position: relative; top: 0px; left: 0px; width: 900px; height: 250px; overflow

需要帮助我想在下面的代码中设置url image from String参数,这是我从数据库中的表路径获得的,这是我的.zul代码:

   <div data-u="slides" apply="id.my.berkah.web.controller.ListTopController" style="cursor: default; position: relative; top: 0px; left: 0px; width: 900px; height: 250px; overflow: hidden;">
            <div data-p="112.50" style="display: none;">
            <img data-u="image" src="ImageProgram/Tsel-Banner.jpg" />
            </div>
            <div data-p="112.50" style="display: none;">
            <img data-u="image" src="ImageProgram/Xl Baner.jpg" />
            </div>
            <div data-p="112.50" style="display: none;">
            <img data-u="image" src="ImageProgram/IndosatBnr.jpg" />
            </div>
            <div id="jssor_1" apply="id.my.berkah.web.controller.ListTopController" data-p="112.50" style="display: none;">
            <image id="bg4" data-u="image" src="" />
            </div>
            <a data-u="ad" href="http://www.jssor.com" style="display:none">Responsive Slider</a>

        </div>

但它只会给我一个空指针异常,我应该如何从数据库中的表路径设置src Image。

我首先做了一些注释,以查看它的运行方向。
最简单的修复方法就是更改为MVVM

MVVM更容易理解,无需连接和重用zul或ViewModel。

我们如何开始,首先我们改变zul:

祖尔: 首先,如果代码中有任何错误,请告诉我,我会纠正它们。
这是因为我写的代码都是这样的,所以总是有可能出现打字错误。 现在,我添加了一个按钮,显示如何调用该命令。
你看,我可以在任何我喜欢的活动中调用它,只要它们存在。
请注意,必须在声明viewmodel的组件范围内调用该命令。(但这也适用于控制器)

如果还有任何问题,请发表评论,我将进一步澄清

编辑: 为了用评论中的问题完成回答:

  • @bind
    对您没有帮助,这是
    @load
    +
    @save

  • 您应该检查是否调用了getter:
  • 是=>src将不正确
  • 否=>NotifyChange不存在或设置在其他命令或setter上。您可以使用
    BindUtils.postNotifyChange(null,null,myImage,“.”)以通知绑定器重新加载属性。(应使用此函数调用getter)
  • 关于html,您使用的是zul文件还是其他文件?(应该是zul)

我首先发表一些评论,看看它的发展方向。
最简单的修复方法就是更改为MVVM

MVVM更容易理解,无需连接和重用zul或ViewModel。

我们如何开始,首先我们改变zul:

祖尔: 首先,如果代码中有任何错误,请告诉我,我会纠正它们。
这是因为我写的代码都是这样的,所以总是有可能出现打字错误。 现在,我添加了一个按钮,显示如何调用该命令。
你看,我可以在任何我喜欢的活动中调用它,只要它们存在。
请注意,必须在声明viewmodel的组件范围内调用该命令。(但这也适用于控制器)

如果还有任何问题,请发表评论,我将进一步澄清

编辑: 为了用评论中的问题完成回答:

  • @bind
    对您没有帮助,这是
    @load
    +
    @save

  • 您应该检查是否调用了getter:
  • 是=>src将不正确
  • 否=>NotifyChange不存在或设置在其他命令或setter上。您可以使用
    BindUtils.postNotifyChange(null,null,myImage,“.”)以通知绑定器重新加载属性。(应使用此函数调用getter)
  • 关于html,您使用的是zul文件还是其他文件?(应该是zul)

看起来我的变量bg4没有被识别,但我有@Wire it你在使用什么编写器,为什么你要在同一个控制器上应用两次,而第一个完全访问div?你好@chillworld我在使用SelectorComposer,我仍然不擅长使用zk,在这里,我尝试在我的第一个div中应用controller,并获取空指针异常,因此我在指定的div中应用contain image,我想更改image src,但它仍然是空指针异常,请需要帮助尝试添加一个按钮,并收听该按钮以进行测试。我想在没有创建图像时会触发onCreate in。我在按钮中创建了一个onClick事件,如下所示:看起来我的变量bg4没有被识别,但是我有@Wire it你用的是什么作曲家?为什么你要用两个相同的控制器,而第一个控制器完全可以访问div?你好@chillworld我用的是selector或composer,我仍然不擅长使用zk,在这里,我尝试在我的第一个div中应用controller,并获取空指针异常,因此我在指定的div中应用contain image,我想更改image src,但它仍然是空指针异常,请需要帮助尝试添加一个按钮,并收听该按钮以进行测试。我想在没有创建映像时会触发onCreate in。我在一个按钮中创建了onClick事件,如下所示:非常感谢您的帮助,…上面的事件正在工作,但变量myImage的值仍然没有加载到zul文件中的bg4中,我已尝试将src=“@load(vm.myImage)”更改为src=“@bind(vm.myImage)”但是仍然没有改变,可能组件内部标记不能在java代码中指定事件非常感谢@chillworld,我所有的组件图像都在标记内部,我看到这似乎是一个很好的方式,我会尝试感谢你所有的帮助,…上面的事件正在工作,但变量myImage的值仍然没有加载到zul文件中的bg4中,我尝试将src=“@load(vm.myImage)”更改为src=“@bind(vm.myImage)”,但仍然没有更改,可能标记内的组件无法在java代码中指定事件非常感谢@chillworld,我所有的组件图像都在标记内,我看到这似乎是一个不错的方式,我会尝试
@Wire 
Image bg4;

 @Listen("onCreate=#listTop")
    public void initWindow() throws IOException {
    AImage tempImage=null;    
    prmTrxTop par=new prmTrxTop(); 
    par.setPrmOutlet("%%");
    ReportImpl list = new ReportImpl();
    List<TopModel> result = list.selectTop(par);
    String image1=result.get(0).getImageModel1();
    bg4.setSrc(image1);
    }
<div data-u="slides" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('id.my.berkah.web.controller.ListTopController')" style="cursor: default; position: relative; top: 0px; left: 0px; width: 900px; height: 250px; overflow: hidden;">
    <div data-p="112.50" style="display: none;">
        <img data-u="image" src="ImageProgram/Tsel-Banner.jpg" />
    </div>
    <div data-p="112.50" style="display: none;">
        <img data-u="image" src="ImageProgram/Xl Baner.jpg" />
    </div>
    <div data-p="112.50" style="display: none;">
        <img data-u="image" src="ImageProgram/IndosatBnr.jpg" />
    </div>
    <div id="jssor_1" data-p="112.50" style="display: none;">
         <image id="bg4" data-u="image" src="@load(vm.myImage)" />
         <button label="change img source" onClick="@command('changeSrc') onCreate="@command('changeSrc')"/>
    </div>
    <a data-u="ad" href="http://www.jssor.com" style="display:none">Responsive Slider</a>
</div>
public class ListTopController {
    private String myImage;

    @Init
    public void callMeWhateverYouWant() {
        // do what you need to fetch your src.
        myImage = "";
    }

    @Command
    @NotifyChange("myImage")
    public void changeSrc() {
        //This can be added to any event.
        //you can change your image or something else, but you need to notify what's changed.
        myImage="new img src";
    }

    public String getMyImage() {
        return myImage;
    }

    //setter not needed as we use only @load.
}