2010-09-15 16 views
6

मैं जेएसपी का उपयोग कर गतिशील रूप से सामग्री उत्पन्न करने की कोशिश कर रहा हूं।जेएसपी ईएल: संपत्ति का नाम गतिशील निर्माण

मेरे पास <c:forEach> लूप है जिसके भीतर मैं गतिशील रूप से बीन एक्सेसर्स बना देता हूं। कंकाल इस जैसा दिखता है:

<c:forEach var="type" items="${bean.positionTypes}"> 
    ${bean.table} // append 'type' to the "table" property 
</c:forEach> 

मेरे समस्या है: मैं प्रकार के आधार पर ${bean.table} बदलना चाहते हैं।

${bean.tableJanitor} 
${bean.tableChef} 

मैं यह कैसे प्राप्त कर सकते हैं: उदाहरण के लिए, यदि प्रकार {"Janitor", "Chef} थे, मैं उत्पादन करने के लिए करना चाहते हैं?

उत्तर

11

आप गतिशील कुंजी का उपयोग करके बीन गुणों तक पहुंचने के लिए ब्रेस नोटेशन [] का उपयोग कर सकते हैं।

${bean[property]} 

तो, अपने उदाहरण के आधार पर:

<c:forEach var="type" items="${bean.positionTypes}"> 
    <c:set var="property" value="table${type}" /> 
    ${bean[property]} 
</c:forEach> 
+0

धन्यवाद। यह वास्तव में काम करता है। – bulk

+1

यह एक संपत्ति के लिए काम करता है। किसी संपत्ति के अंदर एक संपत्ति के बारे में क्या (यानी, bean.someProperty.someField)? मैंने इसे काम करने के लिए प्रबंधित किया, लेकिन मुझे यकीन नहीं है कि मेरा समाधान सर्वोत्तम प्रथाओं का पालन करता है या नहीं। @ बालससी मेरा समाधान है (नीचे मेरा जवाब देखें) ठीक है या ऐसा करने का सबसे अच्छा तरीका है? – Andre

0

आप डायनमिक तरीके में एक जटिल क्षेत्र तक पहुँचने के लिए की जरूरत है, तो आप ऐसा कर सकते हैं:

<h:outputText value="#{someOtherBean.invokeELGetter('#{bean.'.concat('someProperty.field').concat('}'))}" /> 

और 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); 
} 

ध्यान दें कि इसके लिए ईएल 2.2 (टॉमकैट 7 का उपयोग करने वालों के लिए टॉमकैट 7 की आवश्यकता है)।

संबंधित मुद्दे