java如何将JSON转换为InputText的Obj
我有一个json列表List<String>
,每个字符串都有这样的json{"id":"22","name":"Name","order":"1"}
,我想把它拿到输入框的列表中,然后在保存它时
我想把所有更改都转换成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>
# 1 楼答案
实际上,你不是在问JSF问题,而是一个EL问题,因为
#{json.name}
表达式就是Expression Language关于“问题”
如果
var="json"
的值是一个String
,在你的例子中就是这样,它将由基本的解析器来解析,这些解析器肯定知道String
。将尝试通过显然不存在的getName()
调用字符串上的属性name
,结果是Property 'name' not found on type java.lang.String
。所有这些都在Property 'someproperty' not found on type java.lang.String中进行了解释。因此,在你的例子中使用它是行不通的关于阅读的解决方案
基本上有3种解决方案可以读取并显示JSON
新的字符串EL解析器
您可以创建一个自定义EL解析器,并将其按解析器的顺序放在第一位,这样对于每个需要解析的字符串,都会检查它是否是有效的JSON(最低限度地解析它),如果您认为它是JSON,则完全解析JSON并读取/解释EL,并尝试将其应用于JSON对象。就我所知,这一切都将相当昂贵(但巴卢斯克可能有不同的想法)
新JSON EL解析器
第二个更好的解决方案是将字符串转换为您选择的JSON对象(Java中有很多,包括一个标准化的“JSON-P”,因为Java EE 7和Java EE 8的更新版本)。据我所知,没有默认包含的EL解析器知道如何在EL中处理这些问题,但是examples exist for the non standardized EL formats不知道这将如何执行,测试是知道的
现有EL解析器
第三个选项是将JSON转换为通常的强类型对象,然后让常规的现有解析器对其进行操作。这可以是默认的现有java类型,如
Map
、List
、String
和其他正常值,但它甚至可以是更强的类型,如Person
、Order
,将JSON字符串转换为强类型对象是存在于非标准化JSON库中的一个功能,但直到java EE 8,JSON-B。这还有一个额外的优点,即代码完成和验证在IDE中工作关于写作的解决方案
由于您似乎确实希望将结果写回JSON字符串(您的示例中有一个输入),因此第一个读取解决方案很难扩展到写入,如果可能的话,它将完全打破您似乎希望不编写代码而能够使用它的优势。第二个和第三个解决方案可能都能工作,但第三个方案的优点是可以实现输入验证,比如bean验证等等
# 2 楼答案
创建一个类:
将实时流转换为以下对象:
在xhtml中使用它
将修改后的数据用于: