Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于索引内部类的OGNL语法_Java_Jsp_Struts2_Inner Classes_Ognl - Fatal编程技术网

Java 用于索引内部类的OGNL语法

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

当列表的内容是内部类时,访问索引列表的OGNL语法是什么。Google给出了几个例子,但这些都与访问内部类或枚举的静态成员有关

我的动作课

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