我在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}"/>
html源代码如下:
<tr><td><div id="Name1">Here:My name is 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" %>
<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>
我完成的Java类如下:
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;
}
}
我也使用%{nameVar}
,但值仍为空。 :(有人帮助PLZ
答案 0 :(得分:1)
试试这个
<c:forEach var="value" items="${MyList}" varStatus="loop">
<c:set var="nameVar" scope="request" value="${value.name}"/>
<tr>
<td>
<div id="Name1">Here: <c:out value="${nameVar}"/> </div>
<s:hidden id="Name" name="Name" value='${nameVar}'/>
</td>
</tr>
</c:forEach>
答案 1 :(得分:1)
尽量不要使用value
,key
等属性名称,因为它们可能是保留关键字。
因此,将value
更改为不同的内容,看看是否有效。
编辑:
更改此<s:hidden id="Name" name="Name" value='${nameVar}'/>
至<s:hidden id="Name" name="Name" value="%{nameVar}"/>
<强>更新强>
如果您想使用forEach
标记,请使用
<input type="hidden" name="Name" value="${nameVar}">
或使用<s:iterator>
标签
<s:hidden id="Name" name="Name" value="%{nameVar}"/>