struts2 选项传输选择从数据库中检索和显示值

2022-08-31 15:58:06

在jsp页面中,我有一个左侧和右侧之间的交换值和一个要保存的提交按钮。<s:optiontransferselect>

<s:optiontransferselect 
    allowUpDownOnLeft="false"
    allowUpDownOnRight="false"
    allowSelectAll="false"
    allowAddAllToLeft="false"
    allowAddAllToRight="false"
    addToRightLabel="Go to right"
    addToLeftLabel="Go to left" 
    leftTitle="Left side values"
    headerKey="0"
    name="option"
    list= "optionList"
    rightTitle="Right side values"
    doubleHeaderKey="0"
    doubleList="selectedOptionList" 
    doubleName="selectOption"
    doubleId="selectedValues"
>
</s:optiontransferselect>

<s:submit />

我运行程序,它实际上可以从右侧保存值。但是,它不会显示那里的保存值。

我正在考虑使用javascript并使用事件来实现这一点onchange<s:optiontransferselect>

<script>
    function show(){
        const list = document.getElementById("selectedValues");
        for (var i = 0; i < list.options.length; i++) {
        //seems something not correct in this part but I am not sure how solve in this way 
            list.options[i].selected = true;
        }
        return true;
    }
</script>

<s:optiontransferselect 
    allowUpDownOnLeft="false"
    allowUpDownOnRight="false"
    allowSelectAll="false"
    allowAddAllToLeft="false"
    allowAddAllToRight="false"
    addToRightLabel="Go to right"
    addToLeftLabel="Go to left" 
    leftTitle="Left side values"
    headerKey="0"
    name="option"
    list= "optionList"
    rightTitle="Right side values"
    doubleHeaderKey="0"
    doubleList="selectedOptionList" 
    doubleName="selectOption"
    doubleId="selectedValues"
    onchange ="show()" <!-- onchange seems not work here -->
> 
</s:optiontransferselect>

当我运行程序时,右侧仍然无法显示保存的值。

有关选项转移的更多信息选择,以防它有用。

我有一个动作类。

public class OptionTransferSelectAction extends ActionSupport {
    private List<String> optionList;
    private List<String> selectedOptionList;
    //private String option;
    private  List<String> option;
    private List<String> selectOption;

    public OptionTransferSelectAction (){
        optionList=new ArrayList<String>();
        //display on the left side for selection
        optionList.add("Section A");
        optionList.add("Section B");
        optionList.add("Section C");
        optionList.add("Section D");
        optionList.add("Section E");
        optionList.add("Section F");
        optionList.add("Section G");
        optionList.add("Section H");

        selectedOptionList=new ArrayList<String>();
        //display on the right side
        //pretend it does not have any values in the first time (does not 
        //trigger the save yet)
        
    }   

    public List<String> getOptionList() {
        return optionList;
    }

    public void setOptionList(List<String> optionList) {
        this.optionList = optionList;
    }

    public List<String> getSelectedOptionList() {
        return selectedOptionList;
    }

    public void setSelectedOptionList(List<String> selectedOptionList) {
        this.selectedOptionList = selectedOptionList;
    }
    /*
    public String getOption() {
        return option;
    }

    public void setOption(String option) {
        this.option = option;
    }
    */
    public List<String> getOption() {
        return option;
    }

    public void setOption(List<String> option) {
        this.option = option;
    }


    public List<String> getSelectOption() {
        return selectOption;
    }

    public void setSelectOption(List<String> selectOption) {
        this.selectOption = selectOption;
    }
}

更新

我将选项从 更改为 具有适当的 getter 和 setter。我运行代码,仍然无法显示保存的值。StringList<String>optiontransferselect

我做错了哪一部分?有人会让我知道吗?谢谢。

更新例如,我创建了一个新的jsp,成功.jsp。如果我选择了一些值来选择选项,然后单击提交按钮。jsp文件可以显示我刚刚提交的值。我可以看到数据库中保存的值。但是,选项传输选择仍然无法显示保存的值。

成功.jsp有一个代码,可以显示我刚刚提交的值。

Selected Value(s) : <s:property value="selectOption"/>

在数据库中,我可以看到保存的值,所以我想知道如何让显示保存的值?optiontransferselect

另一个更新

我尝试使用一个按钮来调用javascript函数来显示提交。selectedValues

<script>
    function testshow() {
        var value = document.getElementById("selectedValues");
        for(var i=0;i<value.options.length; i++) {
            alert(value.options[i].innerHTML);
        }
        return true;
    }
</script>

//button to call the function
<s:submit onclick="return testshow()"/>

我运行程序,当我点击按钮时,它可以在提交之前显示选定的值,所以我仍然不明白为什么不能保存选定的值。optiontransferselect


答案 1

我认为为了解决您的问题,您需要了解两件事:

  1. 支柱操作的生存期。
  2. 实际工作原理。optiontransferselect

支柱操作的生命周期

我从这一点开始,因为这可能已经解决了你的问题。


答案 2