The UserNumberBean managed bean, the backing bean for the JavaServer Faces application, provides the basic logic for the game. This bean does the following:
Implements setter and getter methods for the bean fields
Injects the two qualifier objects
Provides a reset method that allows you to begin a new game after you complete one
Provides a check method that determines whether the user has guessed the number
Provides a validateNumberRange method that determines whether the user’s input is correct
The bean is defined as follows:
package guessnumber; import java.io.Serializable; import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.inject.Named; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.component.UIInput; import javax.faces.context.FacesContext; @Named @SessionScoped public class UserNumberBean implements Serializable { private static final long serialVersionUID = 1L; private int number; private Integer userNumber; private int minimum; private int remainingGuesses; @MaxNumber @Inject private int maxNumber; private int maximum; @Random @Inject Instance<Integer> randomInt; public UserNumberBean() { } public int getNumber() { return number; } public void setUserNumber(Integer user_number) { userNumber = user_number; } public Integer getUserNumber() { return userNumber; } public int getMaximum() { return (this.maximum); } public void setMaximum(int maximum) { this.maximum = maximum; } public int getMinimum() { return (this.minimum); } public void setMinimum(int minimum) { this.minimum = minimum; } public int getRemainingGuesses() { return remainingGuesses; } public String check() throws InterruptedException { if (userNumber > number) { maximum = userNumber - 1; } if (userNumber < number) { minimum = userNumber + 1; } if (userNumber == number) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Correct!")); } remainingGuesses--; return null; } @PostConstruct public void reset() { this.minimum = 0; this.userNumber = 0; this.remainingGuesses = 10; this.maximum = maxNumber; this.number = randomInt.get(); } public void validateNumberRange(FacesContext context, UIComponent toValidate, Object value) { if (remainingGuesses <= 0) { FacesMessage message = new FacesMessage("No guesses left!"); context.addMessage(toValidate.getClientId(context), message); ((UIInput) toValidate).setValid(false); return; } int input = (Integer) value; if (input < minimum || input > maximum) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("Invalid guess"); context.addMessage(toValidate.getClientId(context), message); } } }