如何将列表的值传递给隐藏标签? [英] How to pass a value of a list to a hidden tag?

查看:27
本文介绍了如何将列表的值传递给隐藏标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的jsp中有以下代码:

<tr><td><div id="Name1">这里:${value.name}</div></td></tr><s:hidden id="Name" name="Name" value="%{value.name}"/>

html源码如下:

 <tr><td><div id="Name1">这里:我的名字是 X</div></td></tr><input type="hidden" name="Name" value="" id="Name"/>

如图所示,div 标签正确显示了 value.name,但隐藏标签的 value 属性为空.我找不到任何解决方案,因为大多数解决方案都与列表无关.我将其更改为 ${value.name} 但遇到此错误:根据标记文件中的 TLD 或属性指令,属性值不接受任何表达式"

我完成的JSP如下:

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><头><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>注册</title><身体><div id="搜索"><label for="message">旅行详情</label><表格边框=1"><s:form action="Search_Search" ><td><s:textfield name="City" label="City"/></td><td><s:textfield name="HighRate" label="Budget"/></td><td><s:textfield name="Adults" label="Adults"/></td><td><s:textfield name="Childs" label="Child (less 15)"/></td><td><s:select label="Prefered hotel rate" name="rate" list="rate" value="无偏好"/></td><td><s:textfield name="Days" label="Days"/></td><td><s:radio label="预算是否固定" name="BdgFixed" list="BdgFixed"值=默认预算"/><td><s:submit/></td></s:form>

<sx:div><表格边框=1"><tr><c:forEach var="Hotel" items="${HotelsList}" varStatus="loop"><c:set var="nameVar" scope="request" value="${Hotel.name}"/><c:if test="${not loop.first and loop.index % 3 == 0}"></tr><tr></c:if><td><div id="酒店信息"><td><s:form action="Search_AddHotel" ><tr><td><div id="image"><img src=${Hotel.thumbNailUrl} alt="image"/></div></td></tr><s:textfield name="Name3" label="Budget"/><tr><td><div id="Name1">这里:<c:out value="${nameVar}"/></div></td></tr><s:hidden id="Name" name="Name" value='${nameVar}'/><s:label id="name2" name="name2" value="John"/><tr><td><div id="最高房价:">房价:${Hotel.highRate}</div></td></tr><tr><td><div id="地址">地址:${Hotel.address}</div></td></tr><tr><td><s:提交/></s:form></td></tr></td></c:forEach></tr></sx:div>

我完成的Java课程如下:

package com.funontour.controller;导入 org.jdom.Document;导入 org.jdom.Element;导入 org.jdom.input.SAXBuilder;导入 com.funontour.common.Hotels;导入 com.funontour.model.DistanceModel;导入 com.funontour.model.SearchModel;导入 java.io.ByteArrayOutputStream;导入 java.io.Reader;导入 java.io.StringReader;导入 javax.xml.soap.*;导入 java.net.*;导入 java.util.*;公共类 SearchAction {私人字符串名称;私人弦城;私人字符串 HighRate;私人字符串成人;私人字符串儿童;私人名单酒店名单;私人列表<字符串>BdgFixed;私人列表<字符串>速度;private static final String Yes = "Yes";private static final String No = "No";公共字符串执行()抛出异常{生成表格();//运行客户端();//应收到实际汇率//System.out.println("回到strut.xml");返回成功";}公共字符串 getName(){返回名称;}公共无效集名称(字符串名称){this.Name = 名称;}公共无效添加酒店(){System.out.println("姓名为:"+姓名);System.out.println("getName:" + getName());System.out.println("thisName" + this.Name);}public String Search() {//国家设置为 AUSystem.out.println("SearchAction的In Search方法");显示详细资料();字符串结果 = SearchHotel();生成表格();返回结果;}public void generateForm(){BdgFixed = new ArrayList();BdgFixed.add(Yes);BdgFixed.add(No);rate = new ArrayList();rate.add("1");rate.add("2");rate.add("3");rate.add("4");rate.add("5");}public void Showdetails(){System.out.println(this.City + " " + this.HighRate + " " + this.Adults + " "+ this.Childs + " " + this.rate+ " " + this.BdgFixed);}公共字符串搜索酒店(){酒店列表 = 新的 ArrayList();SearchModel searchModel = new SearchModel();列表输入 = new ArrayList();//如果其中一些没有输入应该再次询问//如果没有选择任何内容,则多项选择不起作用if(!getCity().isEmpty())输入.add(getCity());别的输入.添加(伦敦");if(!getHighRate().isEmpty())输入.add(getHighRate());别的输入.添加(0");if(!getAdults().isEmpty())输入.add(getAdults());别的输入.添加(1");if(!getChilds().isEmpty())输入.add(getChilds());别的输入.添加(0");if(!getRate().isEmpty())input.add(this.rate.get(0).toString());别的输入.添加(1");if(!getBdgFixed().isEmpty())input.add(this.BdgFixed.get(0).toString());别的输入.添加(是");如果(searchModel.createMessage(输入)==成功"){System.out.println("成功");setHotelsList(searchModel.getHotelsList());返回成功";}System.out.println("失败");返回成功";}/* 搜索距离公共字符串搜索(){/*//搜索建议公共字符串搜索(){System.out.println("In Search 方法");SearchModel sm = 新的 SearchModel();sm.retrieveItems(getCity().toString());返回成功";}*/公共字符串 getCity() {回城;}公共无效setCity(字符串城市){城市 = 城市;}公共字符串 getHighRate() {返回 HighRate;}public void setHighRate(String highRate) {高利率 = 高利率;}公共列表 getHotelsList() {返回酒店列表;}public void setHotelsList(ListhotelsList) {酒店列表 = 酒店列表;}公共字符串 getAdults() {返回成人;}公共无效 setAdults(字符串成人){成人 = 成人;}公共字符串 getChilds() {返回儿童;}public void setChilds(String childs) {孩子 = 孩子;}公共列表<字符串>getBdgFixed() {返回 BdgFixed;}public void setBdgFixed(List bdgFixed) {BdgFixed = bdgFixed;}公共列表<字符串>获取率(){退货率;}public void setRate(List rate) {this.rate = 率;}}

我也使用了 %{nameVar} 但该值仍然为空.:(有人帮忙请

解决方案

尽量不要使用valuekey等属性名称,因为它们可能被保留关键字.

因此将 value 更改为不同的内容,看看这是否有效.


更改此


更新:

如果你想使用 forEach 标签然后使用

或使用标签和

I have the following code in my jsp:

<c:forEach var="value" items="${MyList}" varStatus="loop">
  <tr><td><div id="Name1">Here:${value.name}</div></td></tr>
  <s:hidden id="Name" name="Name" value="%{value.name}"/>

the html source is as following:

     <tr><td><div id="Name1">Here:My name is X</div></td></tr>
     <input type="hidden" name="Name" value="" id="Name"/>

As demonstrated the div tag is showing the value.name correctly but the value attribute of hidden tag is empty. I could not find any solution because most of the solutions were not related to list. I changed it to ${value.name} but ran into this error: "According to TLD or attribute directive in tag file, attribute value does not accept any expressions"

My completed JSP is as following:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Register</title>
</head>
<body>
    <div id="Search">
        <label for="message">Travel details</label>
    <table border="1">


    <s:form action="Search_Search" >


      <td>
      <s:textfield name="City" label="City" /></td>
      <td><s:textfield name="HighRate" label="Budget" /></td>
      <td><s:textfield name="Adults" label="Adults"/></td>
      <td><s:textfield name="Childs" label="Child (less 15)"/></td>
      <td><s:select label="Prefered hotel rate" name="rate" list="rate" value="no preference"/></td> 
      <td><s:textfield name="Days" label="Days"/></td>
      <td><s:radio label="Is the budget fixed" name="BdgFixed" list="BdgFixed"
            value="defaultBudget"/>
      <td><s:submit/></td>

      </s:form>


    </table>


    </div>

    <sx:div>
                <table border="1">
                <tr>
                <c:forEach var="Hotel" items="${HotelsList}" varStatus="loop">
                 <c:set var="nameVar" scope="request" value="${Hotel.name}"/>
                 <c:if test="${not loop.first and loop.index % 3 == 0}">
                   </tr><tr>
                 </c:if>
                <td>

                  <div id="HotelInfo">



         <td>
         <s:form action="Search_AddHotel" >
         <tr><td><div id="image"><img src=${Hotel.thumbNailUrl} alt="image"/></div></td></tr>
           <s:textfield name="Name3" label="Budget" />  
         <tr><td><div id="Name1">Here:<c:out value="${nameVar}"/></div></td></tr>
         <s:hidden id="Name" name="Name" value='${nameVar}'/>
         <s:label id="name2" name="name2" value="John"/>
         <tr><td><div id="Highest Rate:">Rate:${Hotel.highRate}</div></td></tr>
         <tr><td><div id="Address">Address:${Hotel.address}</div></td></tr>
         <tr><td>
                      <s:submit/>
        </s:form>

         </td></tr>
          </td>

               </c:forEach>
                    </tr>
                </table>
   </sx:div>

</body>
</html>

My completed Java class is as following:

package com.funontour.controller;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

import com.funontour.common.Hotels;
import com.funontour.model.DistanceModel;
import com.funontour.model.SearchModel;

import java.io.ByteArrayOutputStream;
import java.io.Reader;
import java.io.StringReader;

import javax.xml.soap.*;
import java.net.*;
import java.util.*;

public class SearchAction {

    private String Name;
    private String City;
    private String HighRate;
    private String Adults;
    private String Childs;
    private List HotelsList;
    private List<String> BdgFixed;
    private List<String> rate;
    private static final String Yes = "Yes";
    private static final String No = "No";

    public String execute() throws Exception {
        generateForm();
        // runClient(); //actual rate should be received
        // System.out.println("goes back to strut.xml");
        return "SUCCESS";
    }
    public String getName()
    {
        return Name;
    }
    public void setName(String name){
        this.Name = name;
    }
   public void AddHotel(){
       System.out.println("name is:"+Name);
       System.out.println("getName:" + getName());
       System.out.println("thisName" + this.Name);

   }
    public String Search() { // Country is set to AU
        System.out.println("In Search method of SearchAction");
        Showdetails();
        String result = SearchHotel();

        generateForm();  
        return result;
    }

    public void generateForm(){

        BdgFixed = new ArrayList<String>();
        BdgFixed.add(Yes);
        BdgFixed.add(No);

        rate = new ArrayList<String>();
        rate.add("1");
        rate.add("2");
        rate.add("3");
        rate.add("4");
        rate.add("5");
    }

    public void Showdetails(){
        System.out.println(this.City + " " + this.HighRate + " " + this.Adults + " " 
                + this.Childs + " " + this.rate+ " " + this.BdgFixed);
    }
    public String SearchHotel(){
        HotelsList = new ArrayList();
        SearchModel searchModel = new SearchModel();
        List inputs = new ArrayList<String>();


        //If some of these are not entered should ask again
        // for multiple choices do not work if nothing has been selected
        if(!getCity().isEmpty())
        inputs.add(getCity());
        else
            inputs.add("London");

        if(!getHighRate().isEmpty())
        inputs.add(getHighRate());
        else
            inputs.add("0");

        if(!getAdults().isEmpty())
        inputs.add(getAdults());
        else
            inputs.add("1");

        if(!getChilds().isEmpty())
        inputs.add(getChilds());
        else
            inputs.add("0");

        if(!getRate().isEmpty())
        inputs.add(this.rate.get(0).toString());
        else
            inputs.add("1");

        if(!getBdgFixed().isEmpty()) 
        inputs.add(this.BdgFixed.get(0).toString());   
        else
            inputs.add("Yes");

        if(searchModel.createMessage(inputs) == "SUCCESS")
        {
        System.out.println("SUCCESS");
        setHotelsList(searchModel.getHotelsList());
        return "SUCCESS";
        }
        System.out.println("Failed");
        return "SUCCESS";
    }
    /* Search for the distance      
    public String Search(){


    /*//Search for Suggestion
    public String Search(){
        System.out.println("In Search method");
        SearchModel sm = new SearchModel();
        sm.retrieveItems(getCity().toString());
        return "SUCCESS";
    }*/
    public String getCity() {
        return City;
    }

    public void setCity(String city) {
        City = city;
    }

    public String getHighRate() {
        return HighRate;
    }

    public void setHighRate(String highRate) {
        HighRate = highRate;
    }

    public List getHotelsList() {
        return HotelsList;
    }

    public void setHotelsList(List hotelsList) {
        HotelsList = hotelsList;
    }

    public String getAdults() {
        return Adults;
    }

    public void setAdults(String adults) {
        Adults = adults;
    }

    public String getChilds() {
        return Childs;
    }

    public void setChilds(String childs) {
        Childs = childs;
    }

    public List<String> getBdgFixed() {
        return BdgFixed;
    }

    public void setBdgFixed(List<String> bdgFixed) {
        BdgFixed = bdgFixed;
    }

    public List<String> getRate() {
        return rate;
    }

    public void setRate(List<String> rate) {
        this.rate = rate;
    }

}

I used %{nameVar} also but the value is still empty. :( someone help plz

解决方案

Try not to use property names like value, key, etc., because they could be reserved keywords.

So change value to something different and see if is this works.

EDIT:
Change this
<s:hidden id="Name" name="Name" value='${nameVar}'/>
to
<s:hidden id="Name" name="Name" value="%{nameVar}"/>

Update:

If you want to use forEach tag then use
<input type="hidden" name="Name" value="${nameVar}">
or use <s:iterator> tag with
<s:hidden id="Name" name="Name" value="%{nameVar}"/>

这篇关于如何将列表的值传递给隐藏标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆