2014-10-03 36 views
0

我正在做关于glassFish安装附带的Java EE7的教程。它也可用here。该代码存在于glassFish服务器安装目录中将消息添加到faceContext在GlassFish上运行的Java EE7中不起作用?

/glassFish_installation/glassfish4/docs/javaee-tutorial/examples/cdi/guessnumber-cdi

该代码正常工作。它当前显示correct!当用户正确猜测数字,但在游戏结束时不显示failed。所以我介绍了,只是一个小小的变化,以显示failed消息。我在代码的相关更改之上添加了评论。

不知何故,这种改变没有帮助。也就是说,在游戏结束时,failed消息不显示。 但游戏照常运作。我想知道为什么这不起作用以及如何纠正?

感谢

public class UserNumberBean implements Serializable { 

    private static final long serialVersionUID = -7698506329160109476L; 

private int number; 
private Integer userNumber; 
private int minimum; 
private int remainingGuesses; 
@Inject 
@MaxNumber 
private int maxNumber; 
private int maximum; 
@Inject 
@Random 
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!")); 
    } 

    //if remainingGuesses is less than or equal to zero, display failed message 
    //----------------------------------------------- 
    if (remainingGuesses-- <= 0) { 
     FacesContext.getCurrentInstance().addMessage(null, 
       new FacesMessage("failed ")); 
    } 
    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) { 
    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); 
    } 
} 
} 

回答

1

添加的FacesMessage是实际工作,问题是,你在你的条件下使用后减量。

顾名思义,Postdecrement会减少AFTER执行包含postdecrement的语句。

这意味着,如果你写:

if (remainingGuesses-- <= 0) { 

了var remainingGuesses的,如果条件进行评估后递减。

在你的情况下,当最后一次猜测被选中时,remainingGuesses实际上是1,因此if条件不是true,并且不添加消息。

明显不同的解决方案:

if (remainingGuesses-- <= 1) { 
     FacesContext.getCurrentInstance().addMessage(null, 
       new FacesMessage("failed ")); 
    } 

if (--remainingGuesses <= 0) { 
     FacesContext.getCurrentInstance().addMessage(null, 
       new FacesMessage("failed ")); 
    } 

remainingGuesses--; 
    if (remainingGuesses <= 0) { 
     FacesContext.getCurrentInstance().addMessage(null, 
       new FacesMessage("failed ")); 
    } 

参见:

+0

你得到了!对我来说太愚蠢......但如果剩下的猜测是1,游戏还没有完成。所以有更多的猜测可用,这将在下一次迭代中递减。我的意思是,这种情况会在某个时候执行。只是你会得到一个额外的猜测,而不是你应该得到的。对? – 2014-10-04 05:35:36

+0

没有,病情评估后的变种被降低,并且没有更多的猜测提供... – unwichtich 2014-10-04 13:57:30