Struts <html:select> 动态设置所选选项

Struts <html:select> set selected option dynamically

在下面的 Struts 标记代码中,我需要根据从操作传递的值在呈现页面之前更改 select 中的 selected 值。但是我找不到获取选项值并对其进行操作的方法。

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<html:form action="searchMusic" method="POST">
   <html:select property="searchType">
      <html:option value="CLASSICAL">CLASSICAL</html:option>
      <html:option value="ROCK">ROCK</html:option>
   </html:select>
   <html:submit value="Search"/>
</html:form>

我尝试了以下功能,但它不起作用。

$(document).ready(function() {

    var viewRockOrClassical = '${viewRockOrClassical}';
    if (!isEmpty(viewRockOrClassical)) {
        var searchBy = document.getElementByName("searchType");
        if (viewRockOrClassical == "ROCK") {
            searchBy.value = "ROCK";
        }

    }

});

function isEmpty(str) {
    return (!str || 0 === str.length);
}

我在页面加载时遇到的错误是

Uncaught TypeError: undefined is not a function

这是由 "document.getElementByName("searchType")" 行引起的。

给 select 标签一个 id="selectbox" 然后试试这个:

 var viewRockOrClassical = '${viewRockOrClassical}';
        if (!isEmpty(viewRockOrClassical)) {
            var searchBy = document.getElementByID("searchType").options;
            for(int i=0;i<searchBy.length;i++) {
                if (viewRockOrClassical == "ROCK") {
                    searchBy[i].value = "ROCK";
                }
            }   
        }

在行动中设置 属性 价值 class,因为你在行动本身就拥有价值。

formObject.searchType = value;

因此它将在页面加载时显示所选值。

动态设置Struts表单中的值。我们可以直接将值设置为关联的 Struts 操作表单并转发到包含该表单的 JSP 页面。

public ActionForward selectMusic(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    Object requestForMusicType = request.getParameter("requestForMusicType");

    if (requestForMusicType != null && "forRockMusic".equalsIgnoreCase((String) requestForMusicType)) {
        MusicTypeSearchForm musicTypeSearchForm = new MusicTypeSearchForm();
        musicTypeSearchForm.setSearchType("ROCK");
        request.setAttribute("musicTypeSearchForm", musicTypeSearchForm);
    }

    return mapping.findForward("searchForMusic");
}