2014-02-11 106 views
1

我有一个来自外部系统的java变量。我需要根据收到的价值预先选择dorpdown。JSTL - 预选下拉值

我想测试下面的代码,但仍然无法正常工作。

// String myPaymentType =“I”;

//下拉具有值 “”,I,R,IR

<select name="paymentType" id="paymentType" class="form-control"> 
     <c:forEach var="paymentType" items="${paymentTypes}"> 
     <option <c:if test='${paymentType.paymentValue == myPaymentType}' >selected</c:if> 
      value="${paymentType.paymentValue}" >${paymentType.paymentDesc}</option> 
     </c:forEach> 
    </select>              

//PaymentType.Java

private String paymentValue; 
private String paymentDesc; 
public PaymentType(String paymentValue, String paymentDesc) { 
    super(); 
    this.paymentValue = paymentValue; 
    this.paymentDesc = paymentDesc; 
} 
public String getPaymentValue() { 
    return paymentValue; 
} 
public void setPaymentValue(String paymentValue) { 
    this.paymentValue = paymentValue; 
} 
public String getPaymentDesc() { 
    return paymentDesc; 
} 
public void setPaymentDesc(String paymentDesc) { 
    this.paymentDesc = paymentDesc; 
} 

// PaymentTYpes是PaymentType的ArraList对象

PaymentType paymentType1 = new PaymentType("","Select Payment Type"); 
     PaymentType paymentType2 = new PaymentType("I","Initial"); 
     PaymentType paymentType3 = new PaymentType("R","Recurring"); 
     PaymentType paymentType4 = new PaymentType("IR","Intial & Recurring"); 
     PaymentType paymentType5 = new PaymentType("O","Onetime"); 

     paymentTypes.add(0,paymentType1); 
     paymentTypes.add(1,paymentType2); 
     paymentTypes.add(2,paymentType3); 
     paymentTypes.add(3,paymentType4); 
     paymentTypes.add(4,paymentType5); 

// HTML查看源代码

<select name="paymentType" id="paymentType" class="form-control">      <option value="" >Select Payment Type</option> 
     <option value="I" >Initial</option> 
     <option value="R" >Recurring</option> 
     <option value="IR" >Intial & Recurring</option> 
     <option value="O" >Onetime</option> 
     </select> 

回答

0
//It should be 
    request.setAttribute("myPaymentType","I"); 

//Not 
    String myPaymentType = "I"; 

我还有一个问题,我们如何使用jstl验证againest变量?我们只需要在请求对象中有变量吗?

0

假设关于java侧

String myPaymentType = "I"; 
String paymentTypes = "-;I;R;IR"; 
在JSP

以下应该工作(确定,它将被转换成Java,太)

<select name="paymentType"> 
    <c:forEach var="pt" items="${paymentTypes}"> 
    <option ${pt == myPaymentType ? 'selected' : ''} >${pt}</option> 
    </c:forEach> 
</select> 

如果需要为数据和显示单独的值,你需要提供一个数组对。 喜欢的东西

class Pair { 
    private String data; 
    private String display; 
    public Pair (String pDisplay, String pData) { 
     data = pData; 
     display = pDisplay; 
    } 
    public String getData() { 
     return data; 
    } 
    public String getDisplay() { 
     return display; 
    } 
} 

Pair[] paymentTypes = new Pair [] {new Pair ("one", "1"), new Pair ("two", "2")}; 

那么你可以做

<select name="paymentType"> 
    <c:forEach var="pt" items="${paymentTypes}"> 
    <option ${pt.data == myPaymentType ? 'selected' : ''} >${pt.display}</option> 
    </c:forEach> 
</select> 

(免责声明,没有IDE写的,可能有错误) 这个建议是不是唯一可能的解决方案。

+0

Thsnks for explination。我需要使这条线路正常工作。 $ {paymentType.paymentValue == myPaymentType? 'selected':''}。但它仍然不起作用。 – user3067524

+0

请提供'paymentTypes'的java代码。我想有一些错误 –

+0

更新了我的帖子。 Iam能够使用我的原始代码显示值和描述。只有预选的问题。 – user3067524