我正在尝试使用JSP动态生成内容。
我有一个<c:forEach>
循环,我在其中动态创建bean访问器。骨架类似于:
<c:forEach var="type" items="${bean.positionTypes}">
${bean.table} // append 'type' to the "table" property
</c:forEach>
我的问题是:我想根据类型更改${bean.table}
。例如,如果类型为{"Janitor", "Chef}
,我想生成:
${bean.tableJanitor}
${bean.tableChef}
我怎样才能做到这一点?
答案 0 :(得分:12)
您可以使用大括号[]
来使用动态密钥访问bean属性。
${bean[property]}
所以,根据你的例子:
<c:forEach var="type" items="${bean.positionTypes}">
<c:set var="property" value="table${type}" />
${bean[property]}
</c:forEach>
答案 1 :(得分:0)
如果您需要以动态方式访问复杂字段,则可以执行以下操作:
<h:outputText value="#{someOtherBean.invokeELGetter('#{bean.'.concat('someProperty.field').concat('}'))}" />
在SomeOtherBean类中实现invokeELGetter:
public Object invokeELGetter(String el) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory();
ValueExpression exp = expressionFactory.createValueExpression(elContext, el, Object.class);
return exp.getValue(elContext);
}
请注意,这需要EL 2.2(Tomcat 7用于使用Tomcat的人)。