java - 使用 s :iterator in struts2 的动态 url

标签 java jsp struts2

我的问题是:如何使用 <s:itarator> 为 url 提供动态参数在struts2中? 我有一些数据存储在MySQL数据库中,我将数据(Id和Name)放在两个ArrayList中

    package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class Film {
    private String id;
    private String titolo;
    private String trama;
    private int i=0;
    private ArrayList<String> puntate = new ArrayList<String>();
    private ArrayList<Integer> idPuntate = new ArrayList<Integer>();
    protected String DRIVER = "com.mysql.jdbc.Driver";
    protected String url = "jdbc:mysql://localhost/SitoWeb";
    protected String user = "root";
    protected String psw = "";
    private Connection con;
    public String execute(){
    Connessione();
    Query();
    return "success";
    }

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    public String getId() {return id;}
    public void setId(String id) {this.id = id;}
    public String getTitolo(){return titolo;}
    public void setTitolo(String titolo)  {this.titolo=titolo;}
    public String getTrama(){return trama;}

    public void Connessione(){
        try{
        con=null;
        Class.forName(DRIVER);
        con = DriverManager.getConnection(url,user,psw);
        }catch(Exception e){}
    }   
    public void Query(){
        try {
            PreparedStatement cmd = con.prepareStatement("SELECT Film.Titolo, Film.Trama, Episodi.Nome, Episodi.idEpisodio FROM Film INNER JOIN Episodi ON Film.Id = Episodi.id_Film WHERE id = ?");
            cmd.setString(1, id);
            ResultSet rs = cmd.executeQuery();
            while(rs.next()){
                titolo = rs.getString("titolo");
                trama = rs.getString("trama");
                idPuntate.add(i, rs.getInt("idEpisodio"));
                puntate.add(i,rs.getString("Nome"));
                i++;
            }
            rs.close();
            cmd.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public ArrayList<Integer> getIdPuntate() {
        return idPuntate;
    }

    public void setIdPuntate(ArrayList<Integer> idPuntate) {
        this.idPuntate = idPuntate;
    }

    public ArrayList<String> getPuntate() {
        return puntate;
    }

    public void setPuntate(ArrayList<String> puntate) {
        this.puntate = puntate;
    }
}

现在我想在我的 JSP 页面中显示这些数据。我尝试过这样的事情:

<s:url action="episodi" var="episodi">
<s:param name="id"></s:param> // I don't know what to put here...
</s:url>
<ol>
<s:iterator value="puntate">
  <li><a href="<s:property value='#episodi'/>"><s:property/></a></li>
</s:iterator>
</ol>

我不知道该输入什么 <s:param name="id"></s:param>因为参数是一个ArrayList。我试图输入 <s:iterator value="idPuntate">但它返回 0..

最佳答案

有两个问题:

  1. 如果您要为 Collection 的每个元素生成 url,那么您需要将 url 生成放入该 Collection 的迭代内部,否则您将始终拥有相同的 url:

    <ol>
    <s:iterator value="puntate">
        <s:url action="episodi" var="episodio">
            <s:param name="id">something here</s:param>
        </s:url>
    
        <li><a href="<s:property value='#episodio'/>"><s:property/></a></li>
    </s:iterator>
    </ol>
    
  2. 您尚未使用 OOP,这建议创建一个名为 Movie(或 Film)的 bean,其 List<Episode> ,和Episode应该是另一个 bean,例如 Long id , Integer season , Integer number ,和String description .

    由于您使用了两个不同的列表,一个用于剧集描述,另一个用于剧集 ID,并假设它们对齐(不能保证,所以我强烈建议您以 OOP 方式重构代码),您可以在迭代期间通过基于剧集描述索引的索引来访问 ID:

    <ol>
    <s:iterator value="puntate" status="ctr">
        <s:url action="episodi" var="episodio">
            <s:param name="id">
                <s:property value="idPuntate[%{#ctr.index}]"/>
            </s:param>
        </s:url>
    
        <li><a href="<s:property value='#episodio'/>"><s:property/></a></li>
    </s:iterator>
    </ol>
    

P.S: Film 应该是在你的 Action 中声明的 bean,而不是 Action 本身...否则它是不可移植的...如果你需要在其他 Action 中使用 Film 类怎么办?

关于java - 使用 s :iterator in struts2 的动态 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27904340/

相关文章:

java - 使用struts2标签测试字符串长度

java - finally block 是否有可能不执行?

java - 不兼容的边界错误: Java Predicate generics

java - 发布表单时设置请求属性

java - Websphere 自定义错误页面不工作

java - Restful Web 服务 Struts 2

Java String.format - 方法格式(String,Object [])不适用于参数格式(String,float)

java - 从数据库获取数据时解密

java - 结果集 If Null 语句

java - 在不向用户显示而是在后面处理的JSP页面中集成sql语句是否可取?