无法将值从bean设置到JSP页面

问题描述 投票:0回答:2

这是我在 bean 中设置值的代码。

Infobean infobean = new Infobean();
Session session =  HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();
String query="SELECT ifnull(max(CONVERT(id, SIGNED)),0) as maxId FROM infotable";
List<?> list = session.createSQLQuery(query).list();
int a = list.get(0).hashCode()+1;
String id = String.valueOf(a) ;
System.out.println(id);
infobean.setId(id);

这里我想在JSP页面中使用该值。

<td valign="top">
    <s:textfield  name="id" id="id" >
        <s:property value="%{id}" />
    </s:textfield>
</td>

在上面的代码中,我无法从 bean 设置该值。

jsp struts2 struts-tags
2个回答
2
投票

要在jsp中显示bean值,您需要在action类中创建bean实例。假设

DemoAction
是类,
Infobean
是具有
id
属性的 bean 类。

 public class Infobean {
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
 }
public class DemoAction {
    private Infobean info;
    public Infobean getInfo() {
        return info;
    }
    public void setInfo(Infobean info) {
        this.info = info;
    }
}

现在您可以如下显示属性值。

<s:property value="info.id"/>

0
投票

您不需要设置文本字段的值,因为该值是从

name
属性填充的,您应该为其提供操作 bean 的 getter。要将值设置为除
name
属性提供之外的文本字段,您应该使用
value
属性。您还可以在标记正文中设置值,但不建议这样做,因为它首先转换为字符串,然后用于将该字符串保留为文本字段的值。因此,对您来说更好的是为
name
属性和/或
value
属性提供 getter。 Struts2 已经实现了 MVC2 模式,您不必为您的操作编写控制器。相反,您可以提供操作类作为控制器委托的数据模型 bean。而且由于框架将操作 bean 放置在值堆栈的顶部,因此其属性在 JSP 中按名称评估为相应的 getter/setter,无需任何前缀。如果您在操作 bean 中嵌套了 bean,并且没有实现模型驱动接口,那么您还应该为这些 bean 提供 getter/setter,并使用其名称作为 bean 属性的点前缀。

public Infobean extends ActionSupport {

  private Integer id;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  @Override
  public String execute() throws Exception {    
    Session session =  HibernateUtil.getSessionFactory().getCurrentSession();        
    session.beginTransaction();
    String query="SELECT ifnull(max(id),0) as maxId FROM infotable";
    List list = session.createSQLQuery(query).list();
    Object a = list.get(0);
    int id = Integer.parseInt(a.toString())+1;
    System.out.println(id);
    setId(id);

    return SUCCESS;
  }
}

在 JSP 中:

<s:textfield name="id" value="%{id}"/>

当然,您应该在

struts.xml
中创建配置来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.