C'est le fragment de mon Bean:validateur JSF avec méthode personnalisée
public class WaiterBean extends Connector
{
private String PIN;
private String name = null;
public void setPIN(String PIN)
{
this.PIN = PIN;
}
public String getPIN()
{
return PIN;
}
public String getName()
{
return name;
}
public String isPINCorrect(String PIN)
{
try
{
resultSet = statement.executeQuery(
"SELECT name FROM dbo.waiters WHERE PIN=" + PIN);
while(resultSet.next())
{
name = resultSet.getString("name");
}
}
catch (SQLException se)
{
System.out.println(se.getMessage() + "**"
+ se.getSQLState() + "**" + se.getErrorCode());
}
if(name == null)
return "invalid";
else
return "valid";
}
}
C'est haricot validateur:
public class PINValidator implements Validator
{
@Override
public void validate(FacesContext fc, UIComponent uic, Object o) throws ValidatorException
{
String PIN = o.toString();
if(PIN.length() < 4)
{
FacesMessage msg = new FacesMessage("PIN too short");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
Et voilà comment je l'utilise:
<h:form>
<h:panelGrid columns="2">
ENTER PIN
<h:inputText id="PIN" maxlength="4" size="4" value="#{waiterBean.PIN}">
<f:validator validatorId="com.jsf.PINValidator" />
</h:inputText>
</h:panelGrid>
<h:message for="PIN"/>
<br />
<h:commandButton value="SEND" action="#{waiterBean.isPINCorrect(waiterBean.PIN)}" />
<br />
</h:form>
Tout fonctionne bien, mais je pense que c'est une bonne pratique d'inclure la méthode isPINCorrect
dans la classe de validateur (ai-je tort?). Je peux implémenter la méthode dans le validateur, mais ensuite j'ai un problème comment setName pour le WaiterBean
et c'est nécessaire pour l'application.
Comment résoudre le problème? Ou une autre question, devrais-je même essayer de le résoudre?
Quelle est la portée de votre WaiterBean? –
c'est SessionScope –