<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
,