<s: checkbox> не заполняется автоматически в форме struts2

Может ли кто-нибудь объяснить, пожалуйста, как использовать флажок перехватчик. Здесь моя проблема заключается в том, что я должен сохранить значение флажка как "Y", если оно было проверено другим способом, "N" в то же время, когда я просматриваю детали, поступающие из базы данных, если значение флажка равно "Y", то оно имеет быть проверенным, иначе это не должно быть проверено.

1 ответ

В ваш геттер-сеттер поместите код преобразования

private String mycheckbox;

public String execute(){
    //In action you will always get 'Y' or 'N' 
    System.out.println("In action mycheckbox :"+mycheckbox);
    return SUCCESS; 
}

public void setMycheckbox(String mycheckbox) {
    if(mycheckbox.equalsIgnoreCase("false"))
    {
        this.mycheckbox="N";    
    }
    else
    {
    this.mycheckbox = "Y";
    }
}

public String getMycheckbox() {
    if(mycheckbox.equalsIgnoreCase("N"))
    {
        //In JSPs you will always get true or false
        this.mycheckbox="false";    
    }
    else
    {
    this.mycheckbox = "true";
    }
    return mycheckbox;
}

В JSP

<s:checkbox name="mycheckbox" id="mycheckbox"  />

Так что в действии вы получите 'Y' а также 'N' Но для меток стоек он будет использовать true или же false, и флажок будет выбран, если 'Y' есть.

Таким образом, вышеуказанное решение будет работать для вашей проблемы.

Вы можете использовать ту же логику и с перехватчиками, но я думаю, что установщик геттеров - самый простой способ, потому что у вас обязательно должны быть установщики геттеров.

Как работает CheckboxInterceptor??

Когда ты пишешь

<s:checkbox name="mycheckbox" id="mycheckbox" fieldValue="Y" />

Сгенерированный HTML является

 <input id="mycheckbox" type="checkbox" value="Y" name="mycheckbox"></input>

 <input id="__checkbox_mycheckbox" type="hidden" value="Y" name="__checkbox_mycheckbox"></input>

Теперь вы можете увидеть сгенерированное скрытое поле. Таким образом, поле value Y вы получите в значении ="Y" флажка.

Случай 1: если флажок установлен в действии в переменной mycheck box.

В действии mycheckbox:Y (из-за значения ="Y" в <input id="mycheckbox"..>)

Если флажок не установлен

В действии mycheckbox:false

Случай 2: Но если этот флажок не установлен

CheckBoxInterceptor появится на картинке, он будет сканировать параметр с _checkbox префикс и делает то, что -> он устанавливает значение в ложь Таким образом, даже если в скрытом поле не было значения, получим какое-то значение, т.е.

Так что если выбрано fieldValue будет возвращено в переменную действия, и если не выбрано, будет установлено значение false.

Здесь вы можете указать setUncheckedValue("N"); Так что вы можете получить N в __checkbox_mycheckbox но не в mycheckbox переменная. mycheckbox вернет только ложь.

Но нужно помнить, что значение флажка преобразуется только в логическое значение. Поэтому, даже если вы установите это значение, вы получите значение "N" в __checkbox_mycheckbox не в mycheckbox,

Другие вопросы по тегам