无法从单选按钮检索值(returns NULL)
Not able to retrieve value from radiobutton (returns NULL)
我有几个单选按钮,我需要检索它们的值以过滤一些搜索结果。但问题是我似乎只从操作中的 valueRadio
对象中获得 'NULL' 值 return。
我是什么missing/overlooking?如果您需要更多信息,请告诉我。
.JSP 页面
...
<c:set var="filter" value="${PageData.fields.filter}" />
<html-el:form action="/myResultPage" styleId="myResultPage-form" method="get">
...
<div class="form-block floatstop">
<html-el:radio property="field(filter.correct)" value="1"/>
<label>Show only correct results</label>
<br><br>
<html-el:radio property="field(filter.correct)" value=""/>
<label>Show only incorrect results</label>
</div>
...
<div class="floatstop">
<p class="formbuttonwrapper left">
<span class="left" style="margin-left: 10px;">
<em class="block left">
<html-el:button property="event(filterResults)" styleId="searchButton" styleClass="pointer formbuttonwrapper greenButton">Search</html-el:button>
</em>
</span>
</p>
...
</div>
...
</html-el:form>
...
Javascript
...
function addSearchClickListener()
{
$("#searchButton").click(function()
{
if($('#myResultPage-form').valid())
{
var values =
{
'someValue' : $("#someValue").val(),
... //retrieving all values to be shown in the list
}
$.ajax({
url: contextPath + "/myResultPage.do",
type: "get",
cache: false,
data:
{
"event(filterResults)": "",
"field(fieldsJSON)": JSON.stringify(values)
},
success: function(data, status, request)
{
//create list of results
//show list
},
error: function(data)
{
...
}
});
}
});
};
...
动作
public ActionForward onGetFilterResults(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
...
PageData inForm = ActionUtils.getInputForm(mapping, request, form);
String fieldsJSON = (String)inForm.getField("fieldsJSON");
Map<String,Object> fields = (Map<String,Object>)(new JSONReader()).read(fieldsJSON);
ResultVo resultVo = new ResultVo();
...
Object valueRadio = fields.get("correct");
if(valueRadio != null && ((String)valueRadio).length() != 0)
{
if(Integer.parseInt((String)valueRadio ) == 1)
{
resultVo.setResult_incorrect(0); //0 = correct values, 1 = incorrect values
}
else
{
resultVo.setResult_incorrect(1);
}
}
else
{
resultVo.setResult_incorrect(1);
}
...
}
在调试日志中,无论选择哪个按钮,以下都是 return 'NULL'。
LOGGER.debug("valueRadio : " + valueRadio );
LOGGER.debug("get fields: " + fields.get("correct"));
LOGGER.debug("get fields: " + fields.get("filter.correct"));
LOGGER.debug("get field: " + inForm.getField("correct"));
LOGGER.debug("get field: " + inForm.getField("filter.correct"));
LOGGER.debug("request parameter: " + request.getParameter("correct"));
LOGGER.debug("request parameter: " + request.getParameter("filter.correct"));
LOGGER.debug("request paramValues: " + request.paramValues("correct"));
LOGGER.debug("request paramValues: " + request.paramValues("filter.correct"));
我也试过这样处理单选按钮:
("correct[0]") & ("correct[1]")
编辑
单选按钮曾经是 1 个复选框(选中时显示正确结果的列表)。然后 valueRadio
对象被命名为 valueCheckbox
并且 fields.get("correct")
在复选框被选中时做了 return 1
。
这是复选框:
...
<div class="form-block floatstop">
<html-el:checkbox property="field(filter.correct)" styleId="correct" value="1"/>
<label>Show only correct results</label>
</div>
...
原来这是一个愚蠢的错误,我没有注意到我忘记了 styleId
,<html-el:form/>
中的输入字段由 JavaScript 寻址。
将 styleId="correct"
添加到单选按钮后 fields.get("correct")
returns 1 当单选按钮被选中时,这是应该的。
<html-el:radio property="field(filter.correct)" styleId="correct" value="1"/>
我还没有尝试将 styleId="correct"
添加到两个单选按钮,因为对于此应用程序,只需要其中一个按钮的值。
我有几个单选按钮,我需要检索它们的值以过滤一些搜索结果。但问题是我似乎只从操作中的 valueRadio
对象中获得 'NULL' 值 return。
我是什么missing/overlooking?如果您需要更多信息,请告诉我。
.JSP 页面
...
<c:set var="filter" value="${PageData.fields.filter}" />
<html-el:form action="/myResultPage" styleId="myResultPage-form" method="get">
...
<div class="form-block floatstop">
<html-el:radio property="field(filter.correct)" value="1"/>
<label>Show only correct results</label>
<br><br>
<html-el:radio property="field(filter.correct)" value=""/>
<label>Show only incorrect results</label>
</div>
...
<div class="floatstop">
<p class="formbuttonwrapper left">
<span class="left" style="margin-left: 10px;">
<em class="block left">
<html-el:button property="event(filterResults)" styleId="searchButton" styleClass="pointer formbuttonwrapper greenButton">Search</html-el:button>
</em>
</span>
</p>
...
</div>
...
</html-el:form>
...
Javascript
...
function addSearchClickListener()
{
$("#searchButton").click(function()
{
if($('#myResultPage-form').valid())
{
var values =
{
'someValue' : $("#someValue").val(),
... //retrieving all values to be shown in the list
}
$.ajax({
url: contextPath + "/myResultPage.do",
type: "get",
cache: false,
data:
{
"event(filterResults)": "",
"field(fieldsJSON)": JSON.stringify(values)
},
success: function(data, status, request)
{
//create list of results
//show list
},
error: function(data)
{
...
}
});
}
});
};
...
动作
public ActionForward onGetFilterResults(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
...
PageData inForm = ActionUtils.getInputForm(mapping, request, form);
String fieldsJSON = (String)inForm.getField("fieldsJSON");
Map<String,Object> fields = (Map<String,Object>)(new JSONReader()).read(fieldsJSON);
ResultVo resultVo = new ResultVo();
...
Object valueRadio = fields.get("correct");
if(valueRadio != null && ((String)valueRadio).length() != 0)
{
if(Integer.parseInt((String)valueRadio ) == 1)
{
resultVo.setResult_incorrect(0); //0 = correct values, 1 = incorrect values
}
else
{
resultVo.setResult_incorrect(1);
}
}
else
{
resultVo.setResult_incorrect(1);
}
...
}
在调试日志中,无论选择哪个按钮,以下都是 return 'NULL'。
LOGGER.debug("valueRadio : " + valueRadio );
LOGGER.debug("get fields: " + fields.get("correct"));
LOGGER.debug("get fields: " + fields.get("filter.correct"));
LOGGER.debug("get field: " + inForm.getField("correct"));
LOGGER.debug("get field: " + inForm.getField("filter.correct"));
LOGGER.debug("request parameter: " + request.getParameter("correct"));
LOGGER.debug("request parameter: " + request.getParameter("filter.correct"));
LOGGER.debug("request paramValues: " + request.paramValues("correct"));
LOGGER.debug("request paramValues: " + request.paramValues("filter.correct"));
我也试过这样处理单选按钮:
("correct[0]") & ("correct[1]")
编辑
单选按钮曾经是 1 个复选框(选中时显示正确结果的列表)。然后 valueRadio
对象被命名为 valueCheckbox
并且 fields.get("correct")
在复选框被选中时做了 return 1
。
这是复选框:
...
<div class="form-block floatstop">
<html-el:checkbox property="field(filter.correct)" styleId="correct" value="1"/>
<label>Show only correct results</label>
</div>
...
原来这是一个愚蠢的错误,我没有注意到我忘记了 styleId
,<html-el:form/>
中的输入字段由 JavaScript 寻址。
将 styleId="correct"
添加到单选按钮后 fields.get("correct")
returns 1 当单选按钮被选中时,这是应该的。
<html-el:radio property="field(filter.correct)" styleId="correct" value="1"/>
我还没有尝试将 styleId="correct"
添加到两个单选按钮,因为对于此应用程序,只需要其中一个按钮的值。