如何将JSON转换为InputText的Obj

问题描述 投票:0回答:2

我有json List<String>的列表,每个字符串都具有像[{"id":"22","name":"Name","order":"1"}这样的json,我想将其提取到输入框的列表中,然后在保存时我我想进行所有更改并将其转换为JSON

@ManagedBean
@ViewScoped
public class LiveStreamController extends ProductController implements Serializable {

    private static final long serialVersionUID = 5037909267669512508L;
    private static final Logger LOGGER = LoggerFactory.getLogger(LiveStreamController.class);

    private LiveStream liveStream;

....
}

 public class LiveStream extends Product implements Serializable {
    private List<String> jsons = new ArrayList<>();
...
}

而且我想读它

            <c:forEach items="#{liveStreamController.liveStream.jsons}"
                var="json ">
                <h:outputFormat value="#{json.name}" />
                <p:inputText value="#{json.order}" />
            </c:forEach>
java jsf
2个回答
2
投票
关于“问题” ...

如果var="json"的值为您所用的String,它将由基本解析器解析,这些解析器肯定会知道String。将尝试通过显然不存在的name调用字符串的属性getName(),从而导致Property 'name' not found on type java.lang.String。所有这些都在Property 'someproperty' not found on type java.lang.String中进行了说明。因此在您的示例中使用它将不起作用

关于

阅读 ...]的解决方案

基本上有3种解决方案,用于读取

JSON并显示它

New String EL Resolver

您可以创建一个自定义的EL解析器,并将其放在解析器的顺序中,以便对于需要解析的

每个字符串,检查它是否有效地是JSON(最小解析),以及您是否认为它是JSON,然后完全解析JSON并读取/解释EL,然后尝试将其应用于JSON对象。据我所知,所有这些都将是相当昂贵的(但是BalusC可能会有不同的想法)新的JSON EL解析器

第二个更好的解决方案是将String转换为您选择的JSON对象(Java中有很多对象,包括标准化的JSON-P,因为Java EE 7和Java EE 8的更新版本) 。据我所知,没有默认的包含在内的EL解析器知道如何在EL中处理这些解析器,但是examples exist for the non standardized EL formats尽管知道如何测试,但尚不清楚。

现有的EL解析器

第三种选择是将JSON转换为通常为强类型的对象,然后让常规的现有解析器对其进行操作。这可以是默认的现有Java类型,例如MapListString和其他常规值,但是甚至可以更强地键入,例如PersonOrder,将JSON字符串转换为强类型的对象是非标准JSON库中存在的功能,但默认Java(EE)中不存在,直到Java EE 8,JSON-B。这还有一个优势,即代码完成可以在IDE中进行,验证也可以在IDE中进行]

关于写作

...的解决方案

由于您似乎确实想将结果写回到JSON字符串(示例中有输入),因此第一个读取解决方案很难扩展到编写,并且如果可能的话,它将完全破坏您的优势似乎想要不编写代码就能使用它。第二个和第三个解决方案都可以使用,但是第三个解决方案的优点是可以实现输入验证,例如bean验证等。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.