在我的默认页面上,我有一个隐藏的字段来设置托管细节。我已经检查了HTML源代码,值是空的。
- 我试图检查控制器本身是否正在发送
null
数据。但是,数据是由控制器按预期发送的。 - 我试着调试JSP,input标签正确地显示了相同的值,而Spring的form标签显示的值为空。
- 无
BindingResult
错误
包含所有必需getter和setter的对象属性:
public class MakeSwitchForm implements Serializable {
private Custody custody;
private List<Custody> custodyList;
字符串
控制器
@GetMapping
public String defaultView(Model model, HttpServletRequest request, HttpServletResponse response, @RequestHeader(name = "Accept-Language") String locale)
throws ServletException, IOException, PropertyValueNotFoundException, NoSuchMessageException {
MakeSwitchForm form = new MakeSwitchForm();
List<Custody> custodyList = null;
custodyList = filterUserRightCustodies(redCustody, custodyList);// fetches custody list
form.setCustodyList(custodyList);
model.addAttribute("makeSwitchForm", form);
型
JSTL
<form:form id="makeSwitchForm" name="makeSwitchForm" modelAttribute="makeSwitchForm" action="${actionUrl}/makeSwitch" method="post" class="opux-g-container">
<%@ include file="subscriptionSection.jspf"%>
型
subscriptionSection.jspf
<c:choose>
<c:when test="${fn:length(makeSwitchForm.custodyList) == 1}">
<input type="hidden" value="<c:out value="${makeSwitchForm.custodyList[0].custodyNumber}" />" id="custodyNumber_0" />
<form:hidden path="custody.custodyNumber" value="${makeSwitchForm.custodyList[0].custodyNumber}" />
型
HTML源代码
<input type="hidden" value="0007832348" id="custodyNumber_0">
<input id="custody.custodyNumber" name="custody.custodyNumber" value="" type="hidden">
型
有人可以帮助我理解为什么<form:hidden>
值设置为空吗?
2条答案
按热度按时间bqujaahr1#
当我尝试设置如下值时,它工作得很好:
字符串
HTML源代码
型
为什么form:hidden标签不能在里面设置值仍然是个谜。但现在,我认为这是可行的。
zzwlnbp82#
<form:hidden>
标签有一个path
属性来访问对象的属性。它是从Model::modelAttribute
中提到的表单的模型对象中计算的。所以,你必须把
makeSwitchForm
放在控制器中的Model
上:字符串
现在,您可以像前面的EL表达式一样访问属性
custodyList[0].custodyNumber
,但使用<c:set>
标记:型