Мне было интересно, может ли кто-нибудь помочь мне?
Я создаю простую игру с использованием JSF. Мне удалось выполнить основные функции, но я хотел бы рассказать пользователю, сколько игр они играли.
По какой-то причине код, который я написал для него, не работает.
Боб:
import java.util.Random;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class GameBeans {
private int randomNumber;
private int userGuess;
private int gamesPlayed;
public String getWin() {
if(this.userGuess == this.randomNumber)
{
return "Congratulations! You've Won!";
}
else
{
return "You Lose!";
}
}
/**
*
* @return randomNumber
*/
public int getRandomNumber() {
return randomNumber;
}
/**
* sets the generated random number
* @param randomNumber
*/
private void setRandomNumber(int randomNumber) {
this.randomNumber = randomNumber;
}
/**
*
* @return the guess of the user
*/
public int getUserGuess() {
return userGuess;
}
/**
* Sets the guess of the user into userGuess
* @param userGuess
*/
public void setUserGuess(int userGuess) {
this.userGuess = userGuess;
}
/**
*
* @return number of games played by the user
*/
public int getGamesPlayed()
{
return gamesPlayed;
}
private void setGamesPlayed(int played)
{
this.gamesPlayed=played;
}
/**
* Creates a new instance of GameBeans
* Generates a new random number
*
* Compares random number to user's
* choice
*
* Keeps total of games played
*/
public GameBeans() {
Random number = new Random();
int rNumber = number.nextInt(1000);
setRandomNumber(rNumber);
int played = this.gamesPlayed++;
setGamesPlayed(played);
}
}
Первая страница (play_game.xhtml):
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Guess Numbers Page</title>
</h:head>
<h:body>
<h:form>
<h1>Welcome to Your Game Session</h1>
<p>Number of games played this session: #{gameBeans.gamesPlayed}</p>
<p>Enter your lucky number guess and then click play</p>
<p>Your guess: <h:inputText id="iptxt1" value="#{gameBeans.userGuess}" /></p>
<h:commandButton id="cmdBtn1" value="Play" action="game_result" />
</h:form>
</h:body>
</html>
game_result.xhtml:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Game Results</title>
</h:head>
<h:body>
<h:form>
<p>Your Guess: <h:outputText id="outText1" value="#{gameBeans.userGuess}"></h:outputText></p>
<p>Random Number: <h:outputText id="outText2" value="#{gameBeans.randomNumber}"></h:outputText></p>
<p><h:outputText id="outText4" value="#{gameBeans.win}"></h:outputText></p>
<p>Number of Games Played: #{gameBeans.gamesPlayed}</p>
<h:commandButton id="cmdBtn1" value="Play Again" action="play_game" />
</h:form>
</h:body>
</html>
Я хотел бы разрешить пользователю играть снова, даже если они выиграли или проиграли, счет (игра, в которую играли) должна отслеживаться. Это не работает в настоящее время!
Может ли кто-нибудь помочь?
благодаря
@SessionScoped
bean создается только один раз, когда клиент посещает вашу страницу в первый раз. Затем он будет жить до конца сеанса. Другими словами, конструктор вашего компонента @SessionScoped
вызывается только один раз. Это не место для увеличения ваших gamesPlayed
.
@ManagedBean
@SessionScoped
public class GameBeans {
private int randomNumber;
private int userGuess;
private int gamesPlayed;
public GameBeans() {
Random number = new Random();
this.randomNumber = number.nextInt(1000);
this.gamesPlayed = 0;
}
public void getWin() {
if (this.userGuess.equals(this.randomNumber))
return "Congratulations! You've Won!";
else return "You Lose!";
}
public void incrementGamesPlayed() {
this.gamePlayed++;
}
// Getters and Setters
}
И это play_game.xhtml
:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Guess Numbers Page</title>
</h:head>
<h:body>
<h:form>
<h1>Welcome to Your Game Session</h1>
<p>Number of games played this session: #{gameBeans.gamesPlayed}</p>
<p>Enter your lucky number guess and then click play</p>
<p>Your guess: <h:inputText id="iptxt1" value="#{gameBeans.userGuess}" /></p>
<h:commandButton id="cmdBtn1" value="Play" action="game_result"
actionListener="#{gameBeans.incrementGamesPlayed}" />
</h:form>
</h:body>
</html>