我是JSF(v2.0)的新手,我正试图在netbeans.org和coreservlets.com这样的地方学习它。我正在研究一个非常简单的“加/减/乘/除”Java webapp,我遇到了一个问题。当我刚开始时,应用程序输入两个数字并点击“+”键,它们将自动添加到一起。现在我增加了更多的复杂性,我无法将操作转移到托管bean。这就是我刚刚“添加”时所拥有的:
<h:inputText styleClass="display" id="number01" size="4" maxlength="3" value="#{Calculator.number01}" />
<h:inputText styleClass="display" id="number02" size="4" maxlength="3" value="#{Calculator.number02}" />
<h:commandButton id="add" action="answer" value="+" />
对于“回答”页面,我会显示如下答案:
<h:outputText value="#{Calculator.answer}" />
我在Calculator.java托管bean中有适当的getter和setter,操作完美。
现在我已经添加了其他三个操作,我无法可视化如何获取bean的操作参数,以便我可以切换它。我试过这个:
<h:commandButton id="operation" action="answer" value="+" />
<h:commandButton id="operation" action="answer" value="-" />
<h:commandButton id="operation" action="answer" value="*" />
<h:commandButton id="operation" action="answer" value="/" />
然而,Glassfish抱怨说我已经使用了“操作”一次,我试图在这里使用它四次。
有关如何对托管bean进行多项操作以便它可以执行所需操作的任何adivce /提示?
感谢您抽出宝贵时间阅读。
答案 0 :(得分:2)
组件id
确实应该是唯一的。这是HTML规范隐式要求的。你知道,所有JSF都只是生成适当的HTML / CSS / JS代码。给他们一个不同的id
或者只是把它留下来,在这种特定的情况下它没有额外的价值(除非你想把一些CSS / JS挂钩)。
为了达到您的功能要求,您可能会发现f:setPropertyActionListener
有用。
<h:commandButton action="answer" value="+">
<f:setPropertyActionListener target="#{calculator.operation}" value="+" />
</h:commandButton>
<h:commandButton action="answer" value="-">
<f:setPropertyActionListener target="#{calculator.operation}" value="-" />
</h:commandButton>
<h:commandButton action="answer" value="*">
<f:setPropertyActionListener target="#{calculator.operation}" value="*" />
</h:commandButton>
<h:commandButton action="answer" value="/">
<f:setPropertyActionListener target="#{calculator.operation}" value="/" />
</h:commandButton>
在operation
托管bean中有一个属性calculator
:
private String operation; // +setter.
您可以使用getAnswer()
方法访问它并进行相应处理。
或者,让按钮分别指向不同的bean动作但返回所有"answer"
:
<h:commandButton action="#{calculator.add}" value="+" />
<h:commandButton action="#{calculator.substract}" value="-" />
<h:commandButton action="#{calculator.multiply}" value="*" />
<h:commandButton action="#{calculator.divide}" value="/" />
在calculator
托管bean中使用以下方法:
public String add() {
answer = number1 + number2;
return "answer";
}
public String substract() {
answer = number1 - number2;
return "answer";
}
// etc...
然后让getAnswer()
返回answer
并在那里不做任何其他事情。这是一个更清晰的责任分离。