Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Spring反应堆中的Mono或FLux的flatMap或flatMapMany主体中包含多个语句?_Spring_Project Reactor - Fatal编程技术网

如何在Spring反应堆中的Mono或FLux的flatMap或flatMapMany主体中包含多个语句?

如何在Spring反应堆中的Mono或FLux的flatMap或flatMapMany主体中包含多个语句?,spring,project-reactor,Spring,Project Reactor,我有以下代码: Mono<Property> property = propertyService.findById(id); String title; Flux<Photo> photos = property.flatMapMany(prop -> { title = prop.title + '-' + prop.type; return ph

我有以下代码:

        Mono<Property> property = propertyService.findById(id);

        String title;

        Flux<Photo> photos = property.flatMapMany(prop -> 
        {
            title = prop.title + '-' + prop.type;

          return photoService.findByPropertyId(prop.getId());
        }
        );
        model.addAttribute("prop", property);
        model.addAttribute("title", title);
        model.addAttribute("photos", photos);
        // ajx is query param coming from request
        if(ajx != null && !ajx.isEmpty() && ajx.equals("1"))
            return Mono.just("fragments/propertyfrag");
        else
        return Mono.just("property");
Mono-property=propertyService.findById(id);
字符串标题;
Flux photos=property.flatMapMany(prop->
{
title=prop.title+'-'+prop.type;
返回photoService.findByPropertyId(prop.getId());
}
);
model.addAttribute(“prop”,属性);
model.addAttribute(“title”,title);
model.addAttribute(“照片”,照片);
//ajx是来自请求的查询参数
如果(ajx!=null&&!ajx.isEmpty()&&ajx.equals(“1”))
返回Mono.just(“片段/属性碎片”);
其他的
返回单体正义(“财产”);
代码显示了我想要实现的目标,但它甚至没有编译。它给出的错误是道具上的标题和类型不可见

请注意,最后一条语句是对名为property的thymeleaf模板的引用。使用N THYLEAF模板,我可以访问变量prop,就好像它不是被动的,而是普通的prop对象,使我能够直接访问prop对象上的参数。这是否意味着已在thymeleaf模板属性中执行了.block()

在实际代码中,在上述代码中获取title变量后,我需要执行一些业务逻辑,因此我无法使用作为模型属性传递给thymleaf模板的prop直接在thymleaf中获取title


如何解决此问题?

请记住,您的
流量是一个异步过程,因此它无法以这种命令式样式更新其外部的
title
变量。请注意,您的
Flux
也从未订阅或编写过,因此它实际上永远不会被调用

要回答您的另一个问题,在Spring Framework 5中,如果将
映射中的
Mono
传递给Thymeleaf,则会延迟解析该Mono,并将结果值注入Thymeleaf模型

正在等待有关使用
照片的更多信息,对于标题生成,您可能需要撰写更多:

propertyService.findById(id)
    .doOnNext(prop -> model.addAttribute("prop", prop)) //reactively add the prop to the model
    .flatMapMany(prop -> {
        String title = prop.title + '-' + prop.type;
        if(validate(title)) //do some validation
            return photoService.findByPropertyId(prop.getId());
        else
            return Mono.error(new IllegalArgumentException("validation failed"));
    }) //not sure what you do with the `Photo`s there :/
    //for now let's ignore the flux photos and at the end simply emit a String to change the view:
    .thenReturn("property"); //then(Mono.just("property")) in older versions of reactor 3.1.x

谢谢你,西蒙。我更新了我的问题,以清楚地表明我想要什么。我特别添加了model.addAttribute(“title”,title);model.addAttribute(“照片”,照片);让它更清楚。鉴于此,不清楚如何使用您的解决方案。是否需要在控制器代码中的某个位置添加验证方法?