问题:在JSP页面总是访问不到相应Action中的数据,在确定了方法和字段都没错之外,对象也有值,但是在JSP页面就是不能访问到数据,在“开发者工具”的“查看器”中甚至找不到这行代码!
图一.未能访问到试题题目
图二.寻找原因
但是在我的代码中是有<c:forEach></forEach>:
<form id="myForm" action="oeexam!add" method="post">
<input type="text" name="oeexam.oestudent.userName" value="${currentUser.userName }">
<input type="text" name="oeexam.oepaper.id" value="${oepaper.id }">
<c:forEach var="s" items="${soequestionList }" varStatus="status">
<strong>[ ${status.index+1 } ] ${s.subject }</strong><br/><br/>
</c:forEach>
nihao
<div align="center">
<button type="submit" style="width:120px;color:#FFFFFF;background-color: #000000;border-radius: 5px;padding:5px;text-align: center;font-size: 16px;cursor: pointer;overflow: hidden;">交卷</button>
</div>
</form>
解决方法:检查代码,最后发现是在Action中后来定义的几个属性我没有生成get()和set()方法!
图三.发现原因,解决
生成get()和set()方法,程序运行成功!
图四.正常运行
总结一下:
什么是getter()和setter()方法?有何作用?
get()和set()就是java中的封装技术!在javaBean中或是其他需要相应属性的类中,我们一般定义的属性都是“private”私有化的,那么在其他类文件就不能引用(使用)它。使用“private”是把被使用的变量保护起来,使别人不知道这个变量的名称是什么,有保护的作用。
而get()和set()就是在和“private”私有化的变量在同一个类文件中,get()和set()是“public”共有的,也就是说这两个方法是可以被在其他类文件中使用的。set()方法的意思是定义一个方法含一个参数,把所含有的这个参数(后期自己设置)赋给你需要私有化的变量(在当前类中设置),相当于充当媒介,外界想要改变已经“private”私有化的变量,必须要在其他类文件中给方法set一个参数,通过set()变量来更改。get()则是获取这个私有化的变量值。是定义了一个带返回类型的方法,这个返回类型就是已经被你私有化变量的类型。以题目为例,你私有化了String类型的name,那么get()方法的返回类型就是String类型,同时返回当前类中name的值。这样一来在其他类文件中,可以通过set()方法来给和更改另一个类中的加密变量值,可以通过get()来获取另一个类中加密的变量值,而这个被加密的变量则变量名始终没有人知道。
“java中的封装”是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。
封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。
所以,我们在开发过程中需要仔细,很多时候出现的bug就是我们的马虎造成的!像这种类似的问题,比如在页面中哪个字段名称你弄错了,一旦出错了将会很麻烦!而且在页面中错误也不好查找!