Бобы модели не заполняются
Я написал веб-приложение, в котором есть login.jsp, loginAction и login Beans. Когда я заполняю форму в бинах jsp, в loginbeans заполняются через loginAction. Когда я копирую логику с этих страниц для регистрации пользователя, бины не заполняются. Вот мой код..
<s:form action="login" method="post">
<p> <s:textfield key="username" label="Username" required="true" /><br>
<p> <s:password key="password" label="Password" required="true" /><br>
<p> <s:submit value="SignIn"/> <br>
</s:form>
относительный код в struts.xml
<action name="login" class="com.ActionClasses.LoginAction">
<result name="success" type="tiles">welcome </result>
<result name="login" type="tiles">login </result>
<result name="input" type="tiles">login </result>
</action>
LoginAction.java
public class LoginAction extends ActionSupport implements Action, ModelDriven<LoginBeans>{
LoginBeans loginBeans = new LoginBeans();
.
.
.
@Override
public LoginBeans getModel() {
return loginBeans;
}
LoginBeans.java
public class LoginBeans {
private String username;
private String password;
//getters and setters
}
Это все работает нормально, и бобы заполняются. Теперь взгляните на регистрацию пользователя.
registerOphthalmologist.jsp
<s:form action="registerOphthalmologist" method="post">
<s:hidden key="role" label="role" value="O" />
<s:textfield key="username" label="Choose UserName" required="true"/>
<s:password key="password" label="Choose Password" required="true"/>
<s:textfield key="givenName" label="Name" required="true"/>
<s:textfield key="surname" label="Surname" required="true"/>
<s:textfield key="age" label="Age" required="true" value=""/>
<s:select key="gender" label="Gender"
list="#{'M':'Male','F':'Female'}"
required="true"/>
<s:textfield key="contactNumber" name="contactNumber" label="Contact Number" required="true"/>
<s:textfield key="email" name="email" label="email" required="true"/>
<s:textfield key="city" name="city" label="City" required="true"/>
<s:textfield key="district" name="district" label="District" required="true"/>
<s:textfield key="state" name="state" label="State" required="true"/>
<s:textfield key="country" name="country" label="country" required="true"/>
<s:textfield key="postalCode" name="postalCode" label="Postal Code" required="true"/>
<s:textfield key="degree" label="Qualification" required="true"/>
<s:textfield key="university" label="University" required="true" value=""/>
<s:textfield key="hospitalName" label="Hospital Name" required="true"/>
<s:textfield key="experience" label="Years of Experience" required="true" value=""/>
<s:checkbox key="checkMe" label="Agree to terms & Conditions"/>
<s:submit value="Register" align="center"/>
</s:form>
относительный код в struts.xml
<action name="register*" class="com.ActionClasses.RegisterAction">
<result name="success" type="tiles"> home </result>
<result name="input" type="tiles"> register{1} </result>
<result name="error" type="tiles"> register{1} </result>
</action>
RegisterAction.java
public class RegisterAction extends ActionSupport implements Action,ModelDriven<RegisterBeans>
{
RegisterBeans registerBeans = new RegisterBeans();
.
.
.
@Override
public RegisterBeans getModel() {
// TODO Auto-generated method stub
return registerBeans;
}
RegisterBeans.java
public class RegisterBeans extends ActionSupport{
private String username;
private String password;
private char role;
private boolean checkMe;
private String givenName;
private String surname;
private int age;
private char gender;
private String hospitalName;
private String institute;
private String university;
private String degree;
private int experience;
private int research;
private int ophthalmologists;
private String contactNumber;
private String email;
private String city;
private String district;
private String state;
private String country;
private String postalCode;
//getters and setters
}
Эти бобы не заполняются. Какую ошибку я здесь делаю? Мой полный файл struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="*Link" method="{1}" class="classes.HomeLinks">
<result name="home" type="tiles">home </result>
<result name="upload" type="tiles">upload </result>
<result name="register" type="tiles">register </result>
<result name="login" type="tiles">login </result>
</action>
<action name="login" class="com.ActionClasses.LoginAction">
<result name="success" type="tiles">welcome </result>
<result name="login" type="tiles">login </result>
<result name="input" type="tiles">login </result>
</action>
<action name="logout" class="com.ActionClasses.LogoutAction">
<result name="success" type="tiles">home</result>
</action>
<action name="register" class="classes.SpecificRegistrations">
<result name="Ophthalmologist" type="tiles"> registerOphthalmologist </result>
<result name="practitioner" type="tiles"> registerPractitioner </result>
<result name="Researcher" type="tiles"> registerResearcher </result>
<result name="Hospital" type="tiles"> registerHospital </result>
<result name="input" type="tiles"> register </result>
</action>
<action name="register*" class="com.ActionClasses.RegisterAction">
<result name="success" type="tiles"> home </result>
<result name="input" type="tiles"> register{1} </result>
<result name="error" type="tiles"> register{1} </result>
</action>
<action name="upload" class="com.ActionClasses.UploadAction">
<interceptor-ref name="fileUpload">
<param name="maximumSize">3145728</param>
<param name="allowedTypes">image/png,image/gif,image/jpeg,image/pjpeg, image/jpg</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success" type="tiles"> uploaded </result>
<result name="error" type="tiles"> upload </result>
</action>
</package>
</struts>
1 ответ
Потенциальная ошибка:
Удалить extends ActionSupport
от твоего
public class RegisterBeans extends ActionSupport{
декларация. В некоторых обстоятельствах это будет рассматриваться как Действие, а это не то, что вы хотите.
Предупреждения:
Избегать использования
key
атрибут, если вы указываетеlabel
а такжеvalue
тоже используйname
вместо. Согласно документам, этоУстановите ключ (имя, значение, метка) для этого конкретного компонента
Всегда указывайте пространство имен как в конфигурации
<s:form>
атрибут, не очень хорошо работать только с пространством имен по умолчанию.Будьте осторожны с
required="true"
атрибутов; он работает в старых версиях Struts, но после перехода на более новую версию он был изменен наrequiredLabel
, и с тех пор<s:textfield />
поддерживает динамические атрибуты, они будут отображаться на странице так же, как это (required="true"
), а затем интерпретируется браузерами как HTML5required="required"
атрибут, что делает все поля обязательными и без*
символ впереди Я встречал это вчера во время переноса старого проекта, это очень раздражает.Для согласованности объект, представляющий один компонент, должен называться
LoginBean
или жеRegisterBean
вместо формы множественного числаLoginBeans
или жеRegisterBeans
, То же самое для переменных экземпляра, вы должны использовать форму множественного числа, только когда это массив, коллекция и т. Д.ActionSupport
определяется какpublic class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {
поэтому его расширение и реализация интерфейса Action являются излишними.