求解,struts2中为set赋值的问题,花了一天时间了,还是不行...
在JSP这样写:<%@taglibprefix="s"uri="/struts-tags"%>...<s:textfieldlabel="品牌"name="brand.m...
在JSP这样写:
<%@ taglib prefix="s" uri="/struts-tags" %>
...
<s:textfield label="品牌" name="brand.makeNew[0].name"></s:textfield>
<s:textfield label="品牌" name="brand.makeNew[1].name"></s:textfield>
...
Action中:
public class LoginAction extends ActionSupport implements ModelDriven<Product> {
private Product p = new Product();
public Product getP() {
return p;
}
public void setP(Product p) {
this.p = p;
}
public String loginIn() {
return "loginSuccess";
}
public Product getModel() {
System.out.println(p.getPname());
System.out.println(p.getPrice());
System.out.println(p.getBrand());
System.out.println(p.getBrand().size() + " -----------------");
return p;
}
}
LoginAction-conversion.properties文件中(上面的类与这个文件都是在default包中的):
KeyProperty_brand=id
Element_brand=entity.Brand
CreateIfNull_brand=true
Product.java:
package entity;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Product implements Serializable {
private String id;
private String pname;
private double price;
private Set<Brand> brand = new HashSet<Brand>();
public Product() {
super();
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Set<Brand> getBrand() {
return brand;
}
public void setBrand(Set<Brand> brand) {
this.brand = brand;
}
public Product(String id, String pname, double price, Set<Brand> brand) {
super();
this.id = id;
this.pname = pname;
this.price = price;
this.brand = brand;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Brand.java类中:
package entity;
import java.io.Serializable;
public class Brand implements Serializable {
private String id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Brand() {
super();
System.out.println("to here");
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Brand(String id, String name) {
super();
this.id = id;
this.name = name;
}
}
抛出的异常:
警告: Error setting expression 'brand.makeNew[0].name' with value '[Ljava.lang.String;@1ff83'
ognl.OgnlException: Error getting property descriptor: null
太纠结了,不知道错在哪... 展开
<%@ taglib prefix="s" uri="/struts-tags" %>
...
<s:textfield label="品牌" name="brand.makeNew[0].name"></s:textfield>
<s:textfield label="品牌" name="brand.makeNew[1].name"></s:textfield>
...
Action中:
public class LoginAction extends ActionSupport implements ModelDriven<Product> {
private Product p = new Product();
public Product getP() {
return p;
}
public void setP(Product p) {
this.p = p;
}
public String loginIn() {
return "loginSuccess";
}
public Product getModel() {
System.out.println(p.getPname());
System.out.println(p.getPrice());
System.out.println(p.getBrand());
System.out.println(p.getBrand().size() + " -----------------");
return p;
}
}
LoginAction-conversion.properties文件中(上面的类与这个文件都是在default包中的):
KeyProperty_brand=id
Element_brand=entity.Brand
CreateIfNull_brand=true
Product.java:
package entity;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Product implements Serializable {
private String id;
private String pname;
private double price;
private Set<Brand> brand = new HashSet<Brand>();
public Product() {
super();
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Set<Brand> getBrand() {
return brand;
}
public void setBrand(Set<Brand> brand) {
this.brand = brand;
}
public Product(String id, String pname, double price, Set<Brand> brand) {
super();
this.id = id;
this.pname = pname;
this.price = price;
this.brand = brand;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Brand.java类中:
package entity;
import java.io.Serializable;
public class Brand implements Serializable {
private String id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Brand() {
super();
System.out.println("to here");
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Brand(String id, String name) {
super();
this.id = id;
this.name = name;
}
}
抛出的异常:
警告: Error setting expression 'brand.makeNew[0].name' with value '[Ljava.lang.String;@1ff83'
ognl.OgnlException: Error getting property descriptor: null
太纠结了,不知道错在哪... 展开
1个回答
2012-05-19 · 知道合伙人互联网行家
关注
展开全部
<s:textfield label="品牌" name="brand.makeNew[0].name"></s:textfield>
<s:textfield label="品牌" name="brand.makeNew[1].name"></s:textfield>
这个不对
大概看了一下你的程序
product类有4个属性id,name,price,brand
brand有2个属性id,name
action有一个成员变量p
第一个建议:action的成员变量一定要按命名规则来做
Product类的成员变量命名就叫product不要用p,否则,反射机制映射setter方法会出问题。
第二:如果你想给action的成员变量p的name属性传值,这样写
<s:textfield label="p的name属性" name="p.name"></s:textfield>
(这里用p做变量名应该会有问题建议修改)
你的编码习惯很不好,命名不规范,这样会给你代码调试产生很大的障碍。尤其使用开源框架更是如此,框架大多使用反射,反射就是根据属性的名字寻找对应的getter和setter方法来传递值的。
其实看起来你的需求并不复杂,但是你设计的类实在有点复杂,我实在没想出来,什么情况下需要在用set(或者说集合)来做成员变量,并且给这个set从jsp传递值呢?
<s:textfield label="品牌" name="brand.makeNew[1].name"></s:textfield>
这个不对
大概看了一下你的程序
product类有4个属性id,name,price,brand
brand有2个属性id,name
action有一个成员变量p
第一个建议:action的成员变量一定要按命名规则来做
Product类的成员变量命名就叫product不要用p,否则,反射机制映射setter方法会出问题。
第二:如果你想给action的成员变量p的name属性传值,这样写
<s:textfield label="p的name属性" name="p.name"></s:textfield>
(这里用p做变量名应该会有问题建议修改)
你的编码习惯很不好,命名不规范,这样会给你代码调试产生很大的障碍。尤其使用开源框架更是如此,框架大多使用反射,反射就是根据属性的名字寻找对应的getter和setter方法来传递值的。
其实看起来你的需求并不复杂,但是你设计的类实在有点复杂,我实在没想出来,什么情况下需要在用set(或者说集合)来做成员变量,并且给这个set从jsp传递值呢?
追问
我把brand声明在Action类中就行了,是不是一定要放在Action类下呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询