Java 用于索引内部类的OGNL语法
当列表的内容是内部类时,访问索引列表的OGNL语法是什么。Google给出了几个例子,但这些都与访问内部类或枚举的静态成员有关 我的动作课Java 用于索引内部类的OGNL语法,java,jsp,struts2,inner-classes,ognl,Java,Jsp,Struts2,Inner Classes,Ognl,当列表的内容是内部类时,访问索引列表的OGNL语法是什么。Google给出了几个例子,但这些都与访问内部类或枚举的静态成员有关 我的动作课 public class EditNanocomUnlockCode extends ActionSupport { private static final long serialVersionUID = -242116564326058998L; private int id; private int unlockCode; private Str
public class EditNanocomUnlockCode extends ActionSupport {
private static final long serialVersionUID = -242116564326058998L;
private int id;
private int unlockCode;
private String description;
private List<Row> rows = new ArrayList<Row>();
private NanocomUnlockCode code;
@Autowired
NanocomUnlockCodeService service;
public String execute() {
NanocomUnlockCode code = service.find(id);
if (code == null) {
throw new IllegalArgumentException("Trying to access an unknown unlock code " + id);
}
unlockCode = code.getUnlockCode();
description = code.getName();
for(Integer platformId: code.getPlatformIds()) {
addRow(platformId, Services.getPlatform(platformId).getPlatformName());
}
return SUCCESS;
}
private void addRow(int platformId, String platformName) {
rows.add(new Row(platformId, platformName));
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUnlockCode() {
return unlockCode;
}
public void setUnlockCode(int unlockCode) {
this.unlockCode = unlockCode;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public NanocomUnlockCode getCode() {
return code;
}
public void setCode(NanocomUnlockCode code) {
this.code = code;
}
public List<Row> getRows() {
return rows;
}
public void setRows(List<Row> rows) {
this.rows = rows;
}
public class Row {
private boolean selected = false;
private Integer platformId;
private String description;
public Row(Integer platformId, String description) {
this.selected = false;
this.platformId = platformId;
this.description = description;
}
public Row() {
this.selected = false;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public Integer getPlatformId() {
return platformId;
}
public void setPlatformId(Integer platformId) {
this.platformId = platformId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
公共类EditNanocomUnlockCode扩展了ActionSupport{
私有静态最终长serialVersionUID=-242116564326058998L;
私有int-id;
私有int解锁码;
私有字符串描述;
私有列表行=新的ArrayList();
私有NanocomUnlockCode;
@自动连线
NanocomUnlockCodeService服务;
公共字符串execute(){
NanocomUnlockCode=service.find(id);
如果(代码==null){
抛出新的IllegalArgumentException(“尝试访问未知解锁代码”+id);
}
unlockCode=code.getUnlockCode();
description=code.getName();
for(整数platformId:code.getPlatformIds()){
addRow(platformId,Services.getPlatform(platformId.getPlatformName());
}
回归成功;
}
私有void addRow(int platformId,String platformName){
添加(新行(platformId,platformName));
}
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
public int getUnlockCode(){
返回解锁码;
}
公共无效setUnlockCode(int unlockCode){
this.unlockCode=unlockCode;
}
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
公共NanocomUnlockCode getCode(){
返回码;
}
公共无效设置代码(NanocomUnlockCode){
this.code=代码;
}
公共列表getRows(){
返回行;
}
公共无效集合行(列表行){
this.rows=行;
}
公共类行{
选择的私有布尔值=false;
私有整数平台;
私有字符串描述;
公用行(整数平台,字符串说明){
this.selected=false;
这个。平台状=平台状;
this.description=描述;
}
公共行(){
this.selected=false;
}
公选{
返回选中的;
}
已选择公共无效设置(已选择布尔值){
this.selected=selected;
}
公共整数getPlatformId(){
返回平台状;
}
公共void setPlatformId(整数platformId){
这个。平台状=平台状;
}
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
}
以及jsp页面的相关部分
<s:form action="update-nanocom-unlock-codes" theme="simple">
<s:iterator value="rows" status="status">
<tr>
<td>
<s:checkbox name="rows[%{#status.index}].selected" value="%{com.blackbox.x.actions.admin.EditNanocomUnlockCode.rows[#status.index]$Row.selected}"/>
</td>
<td>
<s:label value= "%{rows[#status.index].description}"/>
</td>
</tr>
</s:iterator>
</s:form>
页面显示正确,当调用更新时,我可以看到getRows()被正确调用,但是内部类上的setter从未被调用。如果我将内部类行移动到它自己的顶级类,那么标准
<s:checkbox name="rows[%{#status.index}].selected" value="%{rows[#status.index].selected}"/>
正常工作。问题来自于此:。那么,你是说这不能做到?当然可以做到。但是你可能需要为此创建一个自定义的
ObjectFactory
。