[英]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.