【问题标题】:how variables declared private in javabean get accessed by jspjavabean中声明为私有的变量如何被jsp访问
【发布时间】:2015-03-11 05:03:00
【问题描述】:

我已经定义了许多私有变量,并且还定义了getter/setter方法,然后我在jsp页面中使用表达式语言访问这些变量。但是如何在jsp页面中访问私有定义的变量? 我的java bean代码是- 变量是

                private String beam_current;
                private String beam_energy;
                private String st4_vs6_bag1_rb;
                private String st4_vs6_bag2_rb;
                private String st4_vs6_bag3_rb;
                private String st4_vs6_bag4_rb;
                private String st4_vs6_bag5_rb;
                private String st4_vs6_bag6_rb;
                private String st4_vs6_bag7_rb;
                private String st4_vs6_bag8_rb;
                private String st4_vs6_bag9_rb;

set方法用作-

                   while(rs.next()) 
                    {
                     Vacc_vs6 ref_drop=new Vacc_vs6();
                     ref_drop.setLogtime(rs.getString(1));
                     ref_drop.setBeam_current(rs.getString(2));
                     ref_drop.setBeam_energy(rs.getString(3));
                     ref_drop.setst4_vs6_bag1_rb(rs.getString(4));
                     ref_drop.setst4_vs6_bag2_rb(rs.getString(5));
                     ref_drop.setst4_vs6_bag3_rb(rs.getString(6));
                     ref_drop.setst4_vs6_bag4_rb(rs.getString(7));
                     ref_drop.setst4_vs6_bag5_rb(rs.getString(8));
                     ref_drop.setst4_vs6_bag6_rb(rs.getString(9));
                     ref_drop.setst4_vs6_bag7_rb(rs.getString(10));
                     ref_drop.setst4_vs6_bag8_rb(rs.getString(11));

代码中定义了getter和setter方法-

    public String getBeam_current() {
            return beam_current;
        }

        public void setBeam_current(String string) {
            this.beam_current = string;
        }

现在我的jsp是:-

<c:forEach var="r" items="${ref.refernece(param.ref_logtime)}" 

begin="${count}" end="${count}"> 

<tr bgcolor="darkgray ">
<td><c:out value="${r.logtime}"></c:out></td>

<td>
<c:choose><c:when test="${(r.beam_current) ne 0}"> 

我的问题是,当它们在 java 类中被定义为私有时,我如何能够访问变量 beam_current 和 logtime??

【问题讨论】:

  • 通过相应的public getter 方法通过反射访问它们。
  • @SotiriosDelimanolis,你能解释一下完整的机制吗???

标签: java private


【解决方案1】:

简单来说就是下面的EL表达式

${r.beam_current}

基本上被解析为

Object r = servletRequest.getAttribute("r"); // or from page, session, or application attributes
Class<?> clazz = r.getClass(); 
Method getter = clazz.getMethod(resolveName("beam_current")); // where resolvedName generates a getter name through Java Bean property naming conventions
String result = getter.invoke(r);

然后将result 写入ServletResponseOutputStream

【讨论】:

    【解决方案2】:

    我猜你还没有将getter/setter 声明为私有(你做得对)。

    只要getter/setter 是公开的,就可以通过这些方法访问它们(简而言之)。

    其实这是这些方法的基本目的之一。

    您可以通过将它们中的任何一个设为私有并从表达式语言访问它来进行实验,然后看看会发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2015-03-31
      • 1970-01-01
      • 2011-03-02
      相关资源
      最近更新 更多