2013-08-12 3 views
-4

Я хочу изменить атрибут этих текстовых областей с помощью класса java. Как вы видите, текстовые поля отключены по умолчанию. Я хочу, чтобы это было включено, если пользователь не смог найти зарегистрированный TIN в базе данных. Вот мой код:Изменение атрибута textarea в jsp с использованием класса java

JSP:

<label style="font-size: 17px;">Registered Name</label><br><br>   
<textarea disabled id="tpName" name="tpName" style="margin-top: -9px; width: 275px; height: 40px;">${name}</textarea> 
<br><br> 
<label style="font-size: 17px;">Address</label><br><br>   
<textarea disabled id="tpAddress" name="tpAddress" style="margin-top: -9px; width: 275px; height: 40px;">${address}</textarea> 

класс:

private String tpTin; 
private String tpName; 
private String tpAddress; 
private TblTaxPayment tbltaxpayment; 

public String getTpTin() { 
    return tpTin; 
} 
public String getTpName() { 
    return tpName; 
} 
public String getTpAddress() { 
    return tpAddress; 
} 
public void setTpTin(String tpTin) { 
    this.tpTin = tpTin; 
} 
public void setTpName(String tpName) { 
    this.tpName = tpName; 
} 
public void setTpAddress(String tpAddress) { 
    this.tpAddress = tpAddress; 
} 

private HttpServletRequest request; 

public void setServletRequest(HttpServletRequest request){ 
    this.request = request; 
} 
public TblTaxPayment getTblTaxPayment() { 
    return tbltaxpayment; 
} 
public void setTblTaxPayment(TblTaxPayment tbltaxpayment) { 
    this.tbltaxpayment = tbltaxpayment; 
} 

@SuppressWarnings("unused") 
public String execute() throws Exception { 

    Debugger.border(); 
    Debugger.startDebug(this.getClass().toString()); 

    String tax = request.getParameter("tpTin"); 

    TblTaxPaymentDAO tdao = DAOFactory.getDaoManager(TblTaxPayment.class); 
    TblTaxPayment t = null; 
    t = tdao.findbyTIN(tax.replace("-", "")); 
    tbltaxpayment = (TblTaxPayment) t; 

    try{ 

      Debugger.print("TIN : "+tax); 
      if(tax != null) { 

       tpTin = tbltaxpayment.getTpTin();          
       tpName = tbltaxpayment.getTpName(); 
       tpAddress = tbltaxpayment.getTpAddress(); 

       String tin = tpTin; 
       String name = tpName; 
       String address = tpAddress; 

       request.setAttribute("tin", tin); 
       request.setAttribute("name", name); 
       request.setAttribute("address", address); 

       return SUCCESS; 
      }else{ 
       request.setAttribute("name", true); 
       request.setAttribute("address", true);    
       return SUCCESS; 
      } 


    }catch(Exception e){ 
     e.printStackTrace(); 
     Debugger.endDebug(this.getClass().toString()); 
     Debugger.border(); 
     return ERROR; 
    } 

} 

}

что я сделал. Я установил для атрибута значение true, чтобы иметь возможность изменять свойство/атрибут textareas в jsp.

ответ

1

Если ваш Java-класс содержит логику, которая определяет, включены ли текстовые поля или нет, сначала вы должны иметь хранилище Java-классов, где-то, где JSP может получить доступ. У вас есть несколько вариантов: вы можете установить его как атрибут запроса, например.

request.setAttribute("nameRequired", true /* or false */); 
request.setAttribute("addressRequired", true /* or false */); 

Вы можете хранить флаги в вашем классе Java и сделать их доступными через добытчиками:

boolean nameRequired; 
boolean addressRequired; 

public String execute() throws Exception { 
    ... 
    nameRequired = true /* or false */; 
    addressRequired = true /* or false */; 
    ... 
} 

public boolean isNameRequired() { 
    return nameRequired; 
} 

public boolean isAddressRequired() { 
    return addressRequired; 
} 

Для любой из указанных выше можно также дополнительно изолировать бизнес-логику от пользовательского интерфейса, имея класс возвращает бизнес состояние и наличие пользовательского интерфейса определяют, требуется ли имя или адрес, например;

request.setAttribute("haveTaxInfo", false /* or true */); 

Или что-то еще - семантика.

В любом случае информация, которую JSP требует для определения состояния текстовой области, теперь доступна JSP. Затем, в вашем JSP, вы просто написать атрибут disabled в случае необходимости:

<% 

// option 1: if you used request attributes: 
boolean nameRequired = Boolean.TRUE.equals(request.getAttribute("nameRequired")); 
boolean addressRequired = Boolean.TRUE.equals(request.getAttribute("addressRequired")); 

// option 2: or, if you used class fields: 
boolean nameRequired = businessClass.isNameRequired(); 
boolean addressRequired = businessClass.isAddressRequired(); 

// option 3: or,if you used the business state in a request attribute: 
boolean haveTaxInfo = Boolean.TRUE.equals(request.getAttribute("haveTaxInfo")); 
boolean nameRequired = !haveTaxInfo; // if we don't have the tax info then the name 
boolean addressRequired = !haveTaxInfo; // and address are required. 

%> 

<textarea <%=(nameRequired?"":"disabled")%> id="tpName" name="tpName" style="margin-top: -9px; width: 275px; height: 40px;">${name}</textarea> 
<textarea <%=(addressRequired?"":"disabled")%> id="tpAddress" name="tpAddress" style="margin-top: -9px; width: 275px; height: 40px;">${address}</textarea> 

Ключевым моментом, чтобы забрать домой в том, что вы можете использовать <%= ... %> JSP тегов, чтобы контролировать, будет ли или не писать вам «отключено» в вывод. Вы можете использовать условное выражение в этих тегах на основе некоторого логического значения и что логическое значение должно каким-либо образом передаваться из вашего бизнес-класса в JSP (либо атрибутом запроса, либо получателем, или чем-то еще).

Надеюсь, что помогает.