【问题标题】:Select tag not preselecting a value选择标签未预选值
【发布时间】:2014-07-11 06:38:54
【问题描述】:

我的jsp中有Struts2 select标签:

<s:iterator value="data.members" status="rowstatus">
    <s:select id="Ct%{#rowstatus.index}" name="data.members[%{#rowstatus.index}].extData.carrierKey" headerKey="-1" headerValue="" list="carrier"
              onchange="javascript:autoTab(event,this,%{#rowstatus.index},false);">                                         
    </s:select>
</s:iterator

现在这个carrier 是一个后端的地图,它被填充到这个选择标签中。载体填充如下:

carrier = new HashMap<Integer, String>();
carrier.put(1,"LIC");
carrier.put(2, "Bajaj");

现在假设显示 jsp。我在选择标签中选择 LIC 并提交表单。假设发生了一些验证错误。我调试了应用程序,发现action类中变量"data.members[%{#rowstatus.index}].extData.carrierKey"的值为1。但是jsp上没有填充它的值。

我不明白,为什么没有填充值,如果 data.members[%{#rowstatus.index}].extData.carrierKey 设置了值。据我说,如果它的值为 1,那么选择标签必须显示 LIC。

【问题讨论】:

  • 迭代器标签不是必须的,不用它也可以试试。此外,您还不清楚预选值是什么意思。
  • name="data.members[%{#rowstatus.index}].extData.carrierKey" 想要达到什么目的? ...extData.carrierKey 是您希望默认选择的值吗?
  • 对不起。 javascript 上有一些东西在将其填充到标签中之前清除了该值。好的,谢谢大家的努力。

标签: jsp select struts2


【解决方案1】:

我试试你的代码,对我来说效果很好。

JSP:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>Stack Overflow</title></head>
<body>
    <h1>Stack Overflow</h1>

    <s:form action="stackoverflow"  method="POST">
        <s:iterator value="data.members" status="rowstatus">

           <s:select    id="Ct%{#rowstatus.index}"
                    name="data.members[%{#rowstatus.index}].extData.carrierKey" 
                    headerKey="-1" 
                    headerValue="" 
                    list="carrier"
                    onchange="javascript:autoTab(event,this,%{#rowstatus.index},false);"
                    >                                         
            </s:select>

        </s:iterator>
        <br/>
        <s:submit value="Submit!" method="save" />
    </s:form>

    <script type="text/javascript">
        function autoTab(ev, current,nextElementIndex, varBool){
            document.getElementById("stackoverflow").elements[nextElementIndex].focus();
        };
    </script>
</body>
</html>

行动:

package com.tutorialspoint.struts2.actions;

import java.util.HashMap;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import com.tutorialspoint.struts2.entities.ObjectData;
import com.tutorialspoint.struts2.entities.ObjectMember;

public class StackOverflowAction extends ActionSupport {

    private static final long serialVersionUID = 9053634696133432054L;

    private Map<Integer, String> carrier;
    private ObjectData data;

    public String execute() throws Exception {
        return MyAction.SUCCESS;
    }

    public String save()  throws Exception {
        return MyAction.SUCCESS;
    }

    public Map<Integer, String> getCarrier() {
        if(this.carrier == null) {
            this.carrier = new HashMap<Integer, String>();
            this.carrier.put(1,"LIC");
            this.carrier.put(2, "Bajaj");
        }
        return carrier;
    }

    public ObjectData getData() {
        if(this.data == null) {
            this.data = new ObjectData();
            ObjectMember member1 = new ObjectMember();
            member1.getExtData().setCarrierKey("");
            ObjectMember member2 = new ObjectMember();
            member2.getExtData().setCarrierKey("");
            this.data.getMembers().add(member1);
            this.data.getMembers().add(member2);
        }
        return data;
    }
}

struts.xml:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <package name="stackoverflow" extends="struts-default" namespace="/">

        <action name="stackoverflow" class="com.tutorialspoint.struts2.actions.StackOverflowAction" method="execute">
            <result name="success">/jsp/stackoverflow/test.jsp</result>
        </action>

    </package>
</struts>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2022-01-10
    • 2017-05-04
    • 2016-10-21
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多