簡體   English   中英

JSTL Spring MVC遞歸表單JSP

[英]JSTL Spring MVC Recursive Form JSP

我正在嘗試構建一個動態表單生成器,將json作為輸入。 json來自一個AWS設備陰影,我想構建一個允許用戶操縱其所需狀態的表單。

控制器類如下所示:

@Controller
public class FormGeneratorController {
    @RequestMapping(value = "/form/textfield", method = RequestMethod.GET, params = {"parentName", "propertyName", "propertyValue"})
    public ModelAndView getTextField(@RequestParam(value = "parentName", required = false, defaultValue = "") String parentName,
                                @RequestParam(value = "propertyName", required = false, defaultValue = "") String propertyName,
                                @RequestParam(value = "propertyValue", required = false, defaultValue = "") String propertyValue) {
        ModelAndView model = new ModelAndView("jsonConfigTextField");
        model.addObject("parentName", parentName);
        model.addObject("propertyName", propertyName);
        model.addObject("propertyValue", propertyValue);

        return model;

    }

    @RequestMapping(value = "/form/objectfield", method = RequestMethod.GET, params = {"parentName", "propertyName", "propertyValue"})
    public ModelAndView getObjectField(@RequestParam(value = "parentName", required = false, defaultValue = "") String parentName,
                                        @RequestParam(value = "propertyName", required = false, defaultValue = "") String propertyName,
                                       @RequestParam(value = "propertyValue", required = false, defaultValue = "") String propertyValue) {
        ModelAndView model = new ModelAndView("jsonConfigObjectField");
        JSONObject settings = new JSONObject(propertyValue);
        model.addObject("parentName", parentName);
        model.addObject("propertyName", propertyName);
        model.addObject("propertyValue", settings);

        return model;

    }

    @RequestMapping(value = "/form", method = RequestMethod.GET)
    public ModelAndView getForm() {
        ModelAndView model = new ModelAndView("settingsForm");
        model.addObject("parentName", "");
        model.addObject("propertyName", "root");
        model.addObject("propertyValue", "{\"light\":{\"test\":\"t\"}}");
        return model;
    }
}

settingsForm.jsp:

<form>
    <c:import url="/form/objectfield?parentName=${parentName}&propertyName=${propertyName}&propertyValue=${propertyValue}"></c:import>
    <input type="submit" value="Absenden"> 
</form>

jsonObjectField.jsp:

<c:forEach items="${propertyValue.keys()}" var="propertyKey">
        <c:if test="${propertyValue.get(propertyKey).getClass().name == 'java.lang.String'}">
            <c:import url="/form/textfield?parentName=${parentName}&propertyName=${propertyKey}&propertyValue=${propertyValue.getString(propertyKey)}" ></c:import>
        </c:if>
        <c:if test="${propertyValue.get(propertyKey).getClass().name == 'org.json.JSONObject'}">
            <c:import url="/form/objectfield?parentName=${parentName}&propertyName=${propertyKey}&propertyValue=${propertyValue.getJSONObject(propertyKey)}" ></c:import>
        </c:if>
    </c:forEach>

jsonConfigTextField.jsp:

<div class="form-group">
    <label for="<c:out value="${parentName}_${propertyName}"></c:out>"><c:out value="${parentName}_${propertyName}"></c:out></label>
    <input type="text" class="form-control" id="${parentName}_${propertyName}" name="${parentName}_${propertyName}" value="${propertyValue}">
</div>

這將產生:

<form>
    <div class="form-group">
        <label for=",,,_test,light,root">test,light,root</label>
        <input type="text" class="form-control" id=",,,_test,light,root" name=",,,_test,light,root" value="t,{"test":"t"},{"light":{"test":"t"}}">
    </div>
    <input type="submit" value="Absenden"> 
</form>

但是我想生成一個這樣的表格:

<form>
    <div class="form-group">
        <label for="root_light_test">root_light_test</label>
        <input type="text" class="form-control" id="root_light_test" name="root_light_test" value="t">
    </div>
    <input type="submit" value="Absenden"> 
</form>

似乎JSONObject中的JSONObject存在問題,我認為我會做的遞歸會出錯。 我不明白輸出中所有逗號的來源。 由於重新創建問題非常困難,因此我創建了一個存儲庫供您克隆和自己測試: https : //github.com/faxe1008/JSTLRecursiveForm

我真的很感謝任何幫助,今天我花了4個小時試圖找出問題所在...

您應該解析控制器中的JSON輸入(例如,用Jackson),然后將數據添加到簡單對象中。 這些應該傳遞給您的模型,該模型在您的視圖中可用。 在您的視圖中,只需迭代創建的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM