【问题标题】:Struts 2 property tag can't access abstract parent class memberStruts 2 属性标签无法访问抽象父类成员
【发布时间】:2014-06-09 10:26:19
【问题描述】:

我在通过 struts 访问属性时遇到问题。我想知道是否有谁对struts更有经验,可以给我一些指导。

java类大致是这样设置的:

public abstract class parent{
    protected Integer id;

    public Integer getId(){
        return this.id;
    }
}

public class child extends parent{
    // stuff
}

孩子是一个设置了 getter 的动作类中的列表:

private List<child> childList;

这是我在前端的代码,试图获取id 属性:

<s:iterator value="childList" status="cStatus">
    <s:property value='id' />
</s:iterator>

但是,什么都没有出现。我已经从子类中抓取了其他成员,所以我假设我正在抓取的父成员在抽象类中存在问题?

更新

我试图在jsp 的抽象类中获取另一个属性,它工作正常。我抢到的另一处房产是creationDate。我还在id getter 中添加了断点,它可以正常访问并返回非空值。这是包含hibernate 注释的父级的更详细实现:

@MappedSuperclass
public abstract class parent{
    protected Integer id;
    protected Date creationDate;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @DocumentId
    public Integer getId() {
        return this.id;
    }

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

    @Column(updatable=false, nullable=false)
    @Temporal(TemporalType.TIMESTAMP)
    public Date getCreationDate() {
        return this.creationDate;
    }

    @SuppressWarnings("unused")
    private void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }
}

【问题讨论】:

  • Child 是动作类吗?您使用的是 JSON 结果类型吗?
  • @nmenego Child 不是动作类。我不确定您所说的 JSON 结果类型是什么意思?我要做的就是在 HTML 中显示该属性。
  • 您显示的代码看起来不错。你确定id 正在设置吗?
  • 如果您访问抽象父类和/或子类的其他属性会发生什么?他们是否按照专家的要求工作?
  • 你好@AleksandrM,我在id 的getter 中添加了一个断点,它似乎可以正确返回值。我将在一个月内用更多的发现来更新这个问题。

标签: java hibernate jsp struts2


【解决方案1】:

问题出在

private List<child> childList;

需要

private List<child> childList = new ArrayList<>();
public List<child> getChildList(){
  return childList;
}

在 JSP 中

<s:iterator value="childList" status="cStatus">
    <s:property value="id" />
</s:iterator>

【讨论】:

  • @d_ominic 那么将单个配额更改为双倍呢?
  • JSP 属性可以是单引号或双引号。如果没有吸气剂,那将是一个不同的错误。
  • @DaveNewton 你提到它很好,但最好对属性值使用双配额,对内部字符使用单配额。许多 IDE,包括 IntelliJ IDEA,JSP 编辑器在属性值内使用嵌套配额单或双的红色标记值。无论如何,OGNL 访问继承的属性与不继承的方式相同。 非常不清楚 OP 在问什么。
  • @d_ominic 可能是id 属性未初始化,您确定已将其值设置为非null 并且操作返回调度程序结果以呈现JSP?
  • 嗨@RomanC,首先,感谢您的意见。我已经向 getter 添加了断点,它实际上被调用并返回非空值就好了。因此,我认为问题不在于 struts 访问该属性。我已经用更多发现更新了问题文本。
猜你喜欢
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多