我正在使用 JSF 2.1 ,我有一个h:selectOneMenu
组件,所选值(示例:3)将显示 3 个h:inputText
组件。选择值时,我将值h:commandButton
提交null
给支持 bean,我得到异常。我使用一个支持 bean,范围是会话。
我尝试了 2 个解决方案:
- 使用 2 个
h:form
组件,第一个用于 sh:selectOneMenu
,第二个用于h:inputText
s。 rendered
根据从 中选择的值玩属性h:selectOneMenu
。
在 bean 中,我从h:selectOneMenu
或 的值中获得了选定的值h:inputText
,而不是两者。
<h:form id="f1">
Nombre d'opérandes :
<h:selectOneMenu value="#{c.n}" onchange="submit()" >
<f:selectItem id="item1" itemLabel="1" itemValue="1" />
<f:selectItem id="item2" itemLabel="2" itemValue="2" />
<f:selectItem id="item3" itemLabel="3" itemValue="3" />
<f:selectItem id="item4" itemLabel="4" itemValue="4" />
<f:selectItem id="item5" itemLabel="5" itemValue="5" />
</h:selectOneMenu>
<h:panelGrid rendered="#{c.n!=0}">
<c:forEach var="x" begin="0" end="#{c.n-1}" >
<h:outputLabel value="Opérande #{x+1} : "/>
<h:inputText value="#{c.op2[x]}" /> <br/>
</c:forEach>
<fieldset border="1" style="margin:0 auto;width:150px;text-align: center;border-radius:5px;">
<legend>Operations </legend>
<h:selectOneRadio value="#{c.operation}" style="margin:0 auto;">
<f:selectItem itemValue="+" itemLabel="+"/>
<f:selectItem itemValue="-" itemLabel="-"/>
<f:selectItem itemValue="x" itemLabel="x"/>
</h:selectOneRadio>
</fieldset>
<h:commandButton action="#{c.Calcul}" value="Valider" style="background-color:blue;color:white;" />
<br/>
<h:outputLabel value="Résultat : #{c.res}"/>
</h:panelGrid>
</h:form>
支持豆:
@ManagedBean(name="c")
@SessionScoped
public class Calcul {
Double[] op2;
private int n;
private double res;
private String operation;
public Calcul(){
op2=new Double[100];
}
public double getRes() {
return res;
}
public void setRes(double res) {
this.res = res;
}
public Double[] getOp2() {
return op2;
}
public void setOp2(Double[] op2) {
this.op2 = op2;
}
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public void Calcul(){
if ( operation.equals("+")) {
somme();
}
else if ( operation.equals("-")) soustraction();
else if ( operation.equals("x")) multiplication();
}
public void somme() {
res=0;
for (int i = 0; i < n; i++) res+=op2[i];
}
public void soustraction() {
res=op2[0];
for (int i = 1; i < n; i++) res-=op2[i];
}
public void multiplication() {
res=1;
for (int i = 0; i < n; i++) res*=op2[i];
}
}