Метод не найден в Java Bean через xhtml, имеющий точную подпись
Я хочу сделать регистрацию, написав userEmail, userPassword и userRole в файлах.properties, а затем поработать с ними в auth-config.xml. Итак, я делаю это в loginManagerBean: я знаю о дублировании кода в методе регистра, я исправлю это
public void register(String Remail, String Rpassword, String Rrole) throws InvalidUserException{
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("auction-roles.properties");
try {
prop.load(in);
prop.setProperty(Remail,Rrole);
prop.store(new FileOutputStream("auction-roles.properties"), null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Properties prop2 = new Properties();
InputStream in2 = getClass().getResourceAsStream("auction-users.properties");
try {
prop2.load(in2);
prop2.setProperty(Remail,Rpassword);
prop2.store(new FileOutputStream("auction-users.properties"), null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
login(Remail,Rpassword);
}
LoginManager - это именованный сессионный объект, бин с состоянием. Дело в том, что вход в систему РАБОТАЕТ, но при регистрации:
<h:commandButton id="registerButton" value="register"
action="#{loginManager.register(registerEmail, registerPassword, registerRole)}"/>
У меня есть эти ошибки после нажатия кнопки регистрации:
javax.servlet.ServletException: javax.el.MethodNotFoundException: /templates/register.xhtml @34,86 action="#{loginManager.register(registerEmail, registerPassword, registerRole)}": Method not found: class org.auction.LoginManager$244422980$Proxy$_$$_Weld$EnterpriseProxy$.register(java.lang.String, java.lang.String, java.lang.String)
1 ответ
Передайте параметр через f:param
<h:commandButton id="registerButton" value="register" action="#{loginManager.register} />
<f:param name="regEmail" value="registerEmail" />
<f:param name="regPwd" value="registerPassword" />
<f:param name="regRole" value="registerRole" />
</h:commandButton>
В методе управляемого бина получите значение как это
public void register(){
Map<String, String> resMap = (Map<String, String>) externalContext.getRequestParameterMap();
String Remail= parameterMap.get("regEmail");
String Rpassword= parameterMap.get("regPwd");
String Rrole= parameterMap.get("regRole");
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("auction-roles.properties");
try {
prop.load(in);
prop.setProperty(Remail,Rrole);
prop.store(new FileOutputStream("auction-roles.properties"), null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Properties prop2 = new Properties();
InputStream in2 = getClass().getResourceAsStream("auction-users.properties");
try {
prop2.load(in2);
prop2.setProperty(Remail,Rpassword);
prop2.store(new FileOutputStream("auction-users.properties"), null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
login(Remail,Rpassword);
}