【问题标题】:Get object parameter's name in JSP在 JSP 中获取对象参数的名称
【发布时间】:2014-09-05 12:13:52
【问题描述】:

我对 JSP 非常陌生,我们这周刚刚开始学习它。我在完成学校作业时遇到了问题。

<c:forEach var="tempGebruiker" items="${gebruikers}">
    <!-- Per gebruiker wordt nu een rij aangemaakt met daarin zijn gegevens -->
    <tr>
        <td>
            ${tempGebruiker.name}
        </td>
        <td>
            ${tempGebruiker.streetAddress}
        </td>
        <td>
            ${tempGebruiker.huisnummer}
        </td>
        <td>
            ${tempGebruiker.city}
        </td>
        <td>
            ${tempGebruiker.rol}
        </td>
        <td>
            <a href="gebruikers/wijzig?id=${tempGebruiker.customerNumber}">Wijzig</a> |
            <a href="javascript:if(confirm('Weet u het zeker dat u deze gebruiker wil verwijderen?'))
               window.location='gebruikers/verwijder?id=${tempGebruiker.customerNumber}';">Verwijder</a>
        </td>
    </tr>
</c:forEach>

在这部分:

<td>
    ${tempGebruiker.rol}
</td>

返回一个角色对象,但我需要它来显示该对象的名称。如下:tempGebruiker.getRol().getName(); 我将如何使用 EL 实现这一目标?

编辑: 角色豆

    public class Role implements Serializable {

    private long id;
    private String name;

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

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

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }
}

用户 bean

    public class User implements Serializable {

    private long customerNumber;
    private String name;
    private String streetAddress;
    private String city;
    private int huisnummer;
    private Role rol;

    public User() {
    }

    public User(long customerNumber, String naam, String straatnaam, int huisnummer, String stad, Role rol) {
        this.setCustomerNumber(customerNumber);
        this.setName(naam);
        this.setStreetAddress(straatnaam);
        this.setCity(stad);
        this.setHuisnummer(huisnummer);
        this.setRol(rol);
    }

    /* Getters en setters voor de verschillende attributen van het Model */
    public long getCustomerNumber() {
        return customerNumber;
    }

    public Role getRol() {
        return rol;
    }

    public void setRol(Role rol) {
        this.rol = rol;
    }

    public int getHuisnummer() {
        return huisnummer;
    }

    public void setHuisnummer(int huisnummer) {
        this.huisnummer = huisnummer;
    }

    public void setCustomerNumber(long customerNumber) {
        if (customerNumber < 1) {
            throw new IllegalArgumentException(
                    "Customer number may not be negative, value = " + customerNumber);
        }
        this.customerNumber = customerNumber;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name == null) {
            throw new NullPointerException("Customer name may not be empty");
        }
        this.name = name;
    }

    public String getStreetAddress() {
        return streetAddress;
    }

    public void setStreetAddress(String streetAddress) {
        this.streetAddress = streetAddress;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

【问题讨论】:

  • 你试过了吗:tempGebruiker.rol.name ??
  • @Taerus,Rol 是如何定义的?我的意思是它的结构
  • @spoko 您的编辑无效。 JSP代表Java Server Pages,与Javascript无关,去掉Java标签是不对的。下次提交标签修改时请多加小心。
  • 在这种情况下,标签“Java”也可能被删除。如果我问过这个问题,我会不会在这个问题上标记“Java”,因为不存在 Java SE 问题,否则只需使用 main() 方法即可重现该问题。 @Unihedron
  • @Tiny 虽然标签 [java] 的存在值得商榷,但使用注释“Javascript != Java”将其删除则不是。

标签: java jsp el


【解决方案1】:

试试这个:

<td>
${tempGebruiker.rol.name}
</td>

【讨论】:

  • 我试过 ${tempGebruiker.rol.name} 但它似乎没有用。我确实在 Role bean 中包含了一个 getter 和 setter,还有一个 toString 方法。
【解决方案2】:
${tempGebruiker.rol.name}

getter getXxx() 或(布尔值)isXxx 将变成选择器 .xxx

你也可以使用方法:

${tempGebruikder.isInRole('Admin')}

评论后:

您似乎尝试了正确的方法,也许在豆子上比较我的“解决方案”:

public class Gebruiker {
    public Role getRol() {
        return "actor";
    }
}
public class Role {
    public String getName() {
        return "";
    }
}

你可以试试:

<td>XXX <c:out value="${tempGebruiker.rol}" escapeXml="true"/> YYY</td>
  • 标记 XXX、YYY 在 HTML 源文本中搜索。
  • c:out 与 escapeXml 一起翻译 &lt; 和其他 XML (HTML) 字符。
  • 从“.rol”开始获取toString() 值。

【讨论】:

  • 我试过 ${tempGebruiker.rol.name} 但它似乎没有用。我确实在 Role bean 中包含了一个 getter 和 setter,还有一个 toString 方法。
  • 可以发一下实体Rol的详细信息吗