2011-10-06 103 views
4

我有这个新问题。我在JSF 2.0以下代码与Primefaces 2.2.1:如何为后台bean JSF 2.0中的数组赋值如何给数组赋值JSF 2.0

<h:selectOneMenu id="cmbRole8" value="#{myWorkflow.posToInsert[7]}" > 
    <f:selectItem itemLabel="Select a position..." itemValue="-1" /> 
    <f:selectItems value="#{appPositions.allPositions}" var="ap" 
    itemLabel="#{ap.roDescription}" itemValue="#{ap.roPositionid}" /> 
</h:selectOneMenu> 

这被重复7次以上,总共在我要获取用户输入8个selectOneMenu用于对照。显然这不起作用,因为getters和setter在分配值时不知道使用哪个索引。我怎样才能做到这一点?

回答

4

显然这不起作用,因为getters和setters在分配值时不知道使用哪个索引。

这是不正确的。您的问题可能是由于您未预先初始化阵列而造成的。 JSF/EL即不会为你做(像所有其他“嵌套对象”一样)。它只会按给定的索引设置数组值。

例如

private int[] positions; 

@PostConstruct 
public void init() { 
    positions = new int[3]; // You need to preinitialize it yourself! 
} 

public int[] getPositions() { 
    return positions; 
} 

// No setter needed! 

<h:selectOneMenu value="#{bean.positions[0]}" ... /> 
<h:selectOneMenu value="#{bean.positions[1]}" ... /> 
<h:selectOneMenu value="#{bean.positions[2]}" ... /> 
+0

嗯,这是一个很好的点。我已经在声明中初始化了它,但没有在构造函数中初始化它。我会像你说的那样尝试,并让你知道。谢谢。 –

+0

这不会有所作为。你的具体问题是由别的东西引起的。一个SSCCE将会帮助我们将它打倒。 – BalusC

+0

它的工作!谢谢。 –