无法从radiobutton检索值(返回NULL)

时间:2016-01-25 09:00:12

标签: javascript java html jsp struts

我有几个radiobuttons,我需要检索该值以过滤一些搜索结果。但问题是我似乎只从动作中的valueRadio对象返回'NULL'值。

我缺少/忽视的是什么?如果您需要更多信息,请与我们联系。

.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);
    }
   ...
}

在调试日志中,无论选择哪个按钮,以下都返回'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]")

修改

radiobuttons曾经是1复选框(显示选中时正确结果的列表)。我们将valueRadio对象命名为valueCheckboxfields.get("correct")在选中复选框后返回1

这是复选框:

...
<div class="form-block floatstop">
    <html-el:checkbox property="field(filter.correct)" styleId="correct" value="1"/>
    <label>Show only correct results</label>
</div>
...

1 个答案:

答案 0 :(得分:0)

原来这是一个愚蠢的错误,我没有注意到我忘记了styleId<html-el:form/>内的输入字段被JavaScript注释。

styleId="correct"添加到单选按钮时,fields.get("correct")会在选中单选按钮时返回1,应该如此。

<html-el:radio property="field(filter.correct)" styleId="correct" value="1"/>

我还没有尝试将styleId="correct"添加到两个单选按钮,因为此应用程序只需要1个按钮的值。