【问题标题】:Set values for radiobuttons in JSP在 JSP 中设置单选按钮的值
【发布时间】:2017-05-25 10:56:41
【问题描述】:

我有一个带有单选按钮形式的jsp 文件。使用POST,我在提交后阅读了此表单。

但是,在提交表单后,表单中给出的答案消失了,我想让它们显示出来。

怎么做?我一直在互联网上四处走动,但似乎找不到解决方案。

我一直在循环中尝试使用req.setAttribute("q" + i, "yes");,因为我将从此表单中获取的值保存在一个数组中。

我也想过JS,但没有经验。

没有成功。你能帮忙吗?我只是需要一个提示或一些东西来开始。

编辑:

在我的JSP(keywords.jsp)文件中,有一个搜索表单:

<form method="POST" action="keywords">
                    <p>
                        Are you looking for an urgent email?
                        <label><input type="radio" name="q0" value="yes" class="q0">Yes</label>
                        <label><input type="radio" name="q0" value="no" class="q0">No</label><br/>
                    </p>
                    <p>
                    Are you looking for a business email?
                        <label><input type="radio" name="q1" value="yes" class="q1">Yes</label>
                        <label><input type="radio" name="q1" value="no"  class="q1">No</label><br/>
                    </p>
input class="btn btn-warning" type="submit" value="Search Keywords">

所以当我单击提交时 - 在doPost 中,我得到了这些单选按钮的值。 t 页面重新加载,表单与搜索结果一起再次显示。重新加载后,在表单中,没有检查任何答案。

我想要的是在重新加载表单后检查表单中的答案。重载前给出的答案,重载后应该显示的答案在ArrayList

我有我的 Servlet:

for(int i = 0; i < keywords.getAnswersIDs().size(); i++) {
    if("1".equalsIgnoreCase(keywords.getAnswersIDs().get(i))) {
        req.setAttribute("q" + i, "checked");
        LOGGER.info(MARKER, "For element " + i + " is yes.");
    } else {
        req.setAttribute("q" + i, "no");
        LOGGER.info(MARKER, "For element " + i + " is no.");
    }
}

最后我也有这个:

RequestDispatcher dispatcher = req.getRequestDispatcher("/keywords.jsp");
        LOGGER.info(MARKER, "Dispatcher to keywords.jsp");
        try {
            dispatcher.forward(req, response);
        } catch (ServletException e) {
            LOGGER.debug(MARKER, "Caught ServletException " + e);
            e.printStackTrace();
        } catch (IOException e) {
            LOGGER.debug(MARKER, "Caught IOException " + e);
            e.printStackTrace();
        }

我希望这会有所帮助。

【问题讨论】:

  • 你的问题不清楚,而且没有任何代码。
  • 添加 Servlet 的 doPost() 方法。
  • 您好,我已经添加了我为此表单编写的部分。
  • 嗨@AlanHay,你现在能帮我吗?我在我的问题中添加了更多细节。

标签: forms jsp checkbox


【解决方案1】:

好吧,您在 post 处理程序中设置了一些属性,但在 JSP 中没有做任何事情来表明它们已被选中。您需要添加一些标记以将相关选项设置为已检查(可能通过使用 JSP EL 表达式 - 请参阅底部的参考资料):

Assign an initial value to radio button as checked

所以:

<input type="radio" name="q1" value="yes" ${someAttributeTrue ? 'checked' :''}>

让我们通过创建一些类来保存问题数据,让整个事情变得更简洁。

请注意,我还没有编译和运行它,所以它可能并不完美,但您大致了解。您将需要通过 Servlet 来呈现初始表单,而不是点击关键字.jsp 直接。

一些模型类:

public class Questionnaire{
    private List<Question> questions;

    public Questionnaire(){
        questions = new ArrayList<>();
        questions.add(new Question("Are you looking for an urgent email?", false));
        questions.add(new Question("Are you looking for a business email?", true));
    }

    public List<Question> getQuestions(){
        return questions;
    }
}

public class Question{
    private String question;
    private boolean selected;

    // boolean specifies the default on initial page load
    public Question(String question, boolean selected){
        this.question = question;
        this.selected = selected;
    }

    public String getQuestion(){
        return question;
    }

    public boolean isSelected(){
        return selected;
    }
}

Servlet:

public class MyServlet extends HttpServlet{

    public void doGet(HttpServletReqest request, HttpServletResponse response){
        //set a default questionnaire for initial render of JSP
        request.setAttribute("questionnaire", new Questionnaire());

        RequestDispatcher dispatcher = req.getRequestDispatcher("/keywords.jsp");
        dispatcher.forward(request, response);
    }

    public void doPost(HttpServletReqest request, HttpServletResponse response){
        Questionniare questionnaire = new Questionnaire();

        for(int i = 0; i < questionnaire.getQuestions().size(); ++ i){
            //set selected based on incoming parameter
            boolean selected = request.getParameter("q"+i).equals("yes")
            questionnaire.getQuestions().get(i).setSelected(selected);  
        }

        //set the updated form as a request attribute for re-render of JSP
        request.setAttribute("questionnaire", questionnaire);
        RequestDispatcher dispatcher = req.getRequestDispatcher("/keywords.jsp");
        dispatcher.forward(request, response);
    }
}

JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<form method="POST">
    <!--Iterate all questions and render the inputs-->
    <!--On initial load should show the defaults -->
    <!--After post should show the selections!-->
    <c:forEach items="${questionnaire.questions"} var="question" varStatus="loop">
        <p>
            ${question.question}
            <label><input type="radio" name="q{loop.index}" value="yes" 
                class="q0" ${question.selected ? 'checked' : ''}/>Yes</label>
            <label><input type="radio" name="q{loop.index}" value="no" 
                class="q0" ${! question.selected ? 'checked' : ''}/>No</label>
            <br/>
        </p>
    </c:forEach>
    <input class="btn btn-warning" type="submit" value="Search Keywords"/>
</form>

参考资料:

Java 标准标记库 (JSTL):http://docs.oracle.com/javaee/5/tutorial/doc/bnakc.html

JSP 表达式语言 (EL) http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 2021-03-07
    • 2014-05-12
    • 2015-03-22
    • 2014-12-30
    • 2014-04-23
    • 2023-03-17
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多