从第一个下拉列表中获取价值jsp

时间:2013-08-12 03:32:30

标签: java jsp struts

我的第一个下拉列表 id =“bfnsCode”,我想将该值用于我的下一个下拉列表id =“taxtCode”,以便能够显示新的值集在1日下降。这是我的代码:

<div class="BIR" style="display: none;">
            <div>
            <label style="font-size: 17px;">BIR-Form Number</label><br>         
                <select name="bfnsCode" id="bfnsCode" class="sel" style="width: 245px; margin-left: 0;">
                    <option selected="selected" value=""></option>
                    <%
                        TblBIRFormNoDAO birdao = DAOFactory.getDaoManager(TblBIRFormNo.class);

                        HttpSession live = request.getSession(true);
                        TblUserInformation user = (TblUserInformation) live.getAttribute("user");

                        List<TblBIRFormNo> birtypelist =  null;                     

                        if(user.getRcoCode() != null){
                            birtypelist =birdao.getAllBirFormNumber();
                        }else{

                        }

                        String birtypeoptions = "";

                        if( birtypelist!=null) {
                            if( birtypelist.size()>0 ) {
                            for(int i=0; i<birtypelist.size();i++) {
                            TblBIRFormNo taxtype = (TblBIRFormNo) birtypelist.get(i);
                            birtypeoptions += "<option value='"+taxtype.getBfnsCode()+"'>"+taxtype.getBfnsCode()+"</option>";                                       
                            taxtype = null;
                                }
                            }
                        }

                        birdao = null;
                        birtypelist = null;
                        %>
                        <%=birtypeoptions%>

                </select>   
            <br><br>
            <label style="font-size: 17px;">Tax Type</label><br>            
                <select name="taxtCode" id="taxtCode" class="sel" style="margin-left: 0;">
                    <option selected="selected" value=""></option>
                    <%
                        TblTaxTypeDAO taxdao = DAOFactory.getDaoManager(TblTaxType.class);

                        List<TblTaxType> taxtypelist =  null;

                        String tax = request.getParameter("bfnsCode");
                        Debugger.print("test : "+tax);

                        if(tax != null){
                            taxtypelist = taxdao.findAlltaxtCode(tax);
                        }else{
                            taxtypelist = taxdao.getAllTaxTypes();
                        }

                        String taxtypeoptions = "";

                        if( taxtypelist!=null) {
                            if( taxtypelist.size()>0 ) {
                            for(int i=0; i<taxtypelist.size();i++) {
                            TblTaxType taxtype = (TblTaxType) taxtypelist.get(i);
                            taxtypeoptions += "<option value='"+taxtype.getTaxtCode()+"'>"+taxtype.getTaxtCode()+"</option>";                                       
                            taxtype = null;
                                }
                            }
                        }

                        taxdao = null;
                        taxtypelist = null;
                        %>
                        <%=taxtypeoptions%>         

                </select>   

正如您所看到的,我在下拉税中使用 request.getParameter(“bfnsCode”)调用该值,但它为我提供了一个空值。

ListBIRFormNo.java c:forEach 的servlet)

public class ListBIRFormNo extends HttpServlet {
private static final long serialVersionUID = 1L;

private List<TblBIRFormNo> birtypelist;

public List<TblBIRFormNo> getTblBIRFormNo() {
    return birtypelist;
}
public void setTblBIRFormNo(List<TblBIRFormNo> birtypelist) {
    this.birtypelist = birtypelist;
}
private HttpServletRequest request;

public void setServletRequest(HttpServletRequest request){
    this.request = request;
}

public String execute(){
    Debugger.border();
    try{
        TblBIRFormNoDAO birdao = DAOFactory.getDaoManager(TblBIRFormNo.class);

        HttpSession live = request.getSession(true);
        TblUserInformation user = (TblUserInformation) live.getAttribute("user");

        if(user.getRcoCode() != null){
            birtypelist =birdao.getAllBirFormNumber();          
        }else{
            //no-op
        }

        //expose 'birtypelist' as an attribute
        request.setAttribute("birtypelist", birtypelist); 

    }catch(Exception e){
        e.printStackTrace();
        Debugger.print(" EXCEPTION :"+e.getStackTrace());
        Debugger.endDebug(this.getClass().toString());
        Debugger.border();
    }
    Debugger.border();
    return null;
}

}

1 个答案:

答案 0 :(得分:1)

我认为您可能误解了请求处理生命周期。 request.getParameter("bfnsCode")具有非空值的唯一方法是,如果使用当前请求发送了名为bfnsCode的参数。这不是你在这里的情况(据我所知),因为你的所有代码都在一个请求的上下文中执行。所以是的,bfnsCode在您检查它时将为空。

如果您希望一个选择框在同一页面内响应另一个选择框,那么通常/最好用JavaScript完成。您需要在第一个onchange框中使用onkeyup<select>(或两者)事件处理程序,并且您希望实现它以便从第一个框中获取值然后使用它来更新第二个框(通过进行AJAX调用以加载相关数据,或者通过从您使用页面设置的某个缓存加载正确的数据集)。这听起来比实际上更复杂(特别是如果你使用像jQuery这样的JavaScript框架),但是你无法像现有方法那样使用纯服务器端代码解决问题。

请考虑重构您的实现,以便它不会直接在JSP页面中嵌入Java代码。您可以移动与检查用户相关的业务逻辑,并查询表单列表到Servlet实现(或Struts提供的等效Servlet类构造;我相信它是Action),然后使用<c:forEach>标记将选项附加到<select>元素(即Sotirios在评论中所说的内容)。

例如,在您的Servlet / Action代码中,您可以像现在一样设置birtypelist,然后执行:

if(user.getRcoCode() != null){
    birtypelist =birdao.getAllBirFormNumber();
}else{
    //no-op
}

//expose 'birtypelist' as an attribute
request.setAttribute("birtypelist", birtypelist);  

...然后在您的JSP页面中,您可以使用:

<select name="bfnsCode" id="bfnsCode" class="sel" style="width: 245px; margin-left: 0;">
    <option selected="selected" value=""></option>
    <c:forEach var="taxtype" items="${birtypelist}">
        <option value="${taxType.bfnsCode}">${taxType.bfnsCode}</option>
    </c:forEach>
</select>

这将为您目前的计划方法提供可比较的结果。