Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Java 如何在Thymeleaf中以递归的形式添加参数化片段?_Java_Spring_Thymeleaf - Fatal编程技术网

Java 如何在Thymeleaf中以递归的形式添加参数化片段?

Java 如何在Thymeleaf中以递归的形式添加参数化片段?,java,spring,thymeleaf,Java,Spring,Thymeleaf,我有一个数据结构,它包含原始值和复杂值 public class Topic{ private String topicUrl = ""; private String key = ""; private String name = ""; private String value = ""; private String type;//RECORD/ARRAY/ENUM/PR

我有一个数据结构,它包含原始值和复杂值

public class Topic{
    private String topicUrl = "";
    private String key = "";
    private String name = "";
    private String value = "";
    private String type;//RECORD/ARRAY/ENUM/PRIMITIVE
    private List<String> enumValues = new ArrayList<>();
    private List<Topic> fieldList = new ArrayList<>();
    //getters setters
    //isEnum()
    //isPrimitive()
    //isRecord()
}
作为JSON提交后:

{
  "topicUrl": "url",
  "key": "",
  "name": "object1",
  "value": "",
  "type": "RECORD",
  "fieldList": [
    {
      "topicUrl": "",
      "key": "",
      "name": "object1.1",
      "value": "",
      "type": "INT",
      "fieldList": []
    },
    {
      "topicUrl": "",
      "key": "",
      "name": "object1.2",
      "value": "",
      "type": "RECORD",
      "fieldList": [
        {
          "topicUrl": "",
          "key": "",
          "name": "object1.2.1",
          "value": "",
          "type": "INT",
          "fieldList": []
        }]
    }]
}
{
    "topicUrl" : "url",
    "key" : "",
    "name" : "object1",
    "value" : "",
    "type" :"RECORD",
    "fieldList":[{
        "topicUrl" : "",
        "key" : "",
        "name" : "object1.1",
        "value" : "11",
        "type" :"INT",
        "fieldList":[]
    },{
        "topicUrl" : "",
        "key" : "",
        "name" : "object1.2",
        "value" : "",
        "type" :"RECORD",
        "fieldList":[{
            "topicUrl" : "",
            "key" : "",
            "name" : "object1.2.1",
            "value" : "121",
            "type" :"INT",
            "fieldList":[]
        }]
}]}
表格页

<form th:action="@{/writeTopic}" th:object="${selectedTopic}" method="post" class="form-horizontal">
    <fieldset>
        <input type="submit" class="btn btn-primary" th:value="Write"></input>
        <table class="table table-striped table-bordered">
        <tbody>
                <tr>
                    <td th:text="TopicUrl"></td>
                    <td>
                       <input readonly th:field="*{topicUrl}" class="form-control form-control-lg"/>
                    </td>
                </tr>
                <tr>
                    <td th:text="Key"></td>
                    <td>
                       <input th:field="*{key}" class="form-control form-control-lg"/>
                    </td>
                </tr>
        </table>
        <div th:replace="fragments/topicFieldsTable  :: topicFieldsTable(topic=${selectedTopic})"></div>
    </fieldset>
</form>

如果类型为“记录”,则每个主题对象在字段列表中都包含主题元素。因此,我创建了用于递归的topicFieldsTable.html片段

<table th:fragment="topicFieldsTable(topic)"  class="table table-bordered table-striped">
    <thead class="thead-dark">
        <tr>
            <th scope="col" th:text="${topic.className}"></th>
            <th scope="col">Type</th>
            <th scope="col">Value</th>
        </tr>
    </thead>
    <tbody>
        <tr th:each="field, itemStat : ${topic.fieldList}">
            <td>
                <!--field.name-->
                <label th:text="${field.name}">Name</label>
            </td>
            <td>
                <!--field.type-->
                <label th:text="${field.type}">Type</label>
            </td> 
            <td th:if="${field.isEnum()}">
                <select class="form-control form-control-lg">
                    <option th:each="eval : ${field.enumValues}" 
                    th:value="${eval}" 
                    th:text="${eval}">Value</option>
                </select>
            </td>
            <td th:if="${field.isRecord()}">
                <div th:replace="fragments/topicFieldsTable  :: topicFieldsTable(topic=${field})"></div>
            </td>
            <td th:if="${field.isPrimitive()}">
                <!--field.value-->
               <input name="value" th:name="${field.name}" th:value="${field.value}" class="form-control form-control-lg"/>
            </td>
        </tr>
    </tbody>
</table>

类型
价值
名称
类型
价值
此外,我无法为片段中的th:field分配字段。 你知道吗