我有一个奇怪的问题,或者我认为这很奇怪。 首先,这些是代码:
public class Bean implements Serializable {
private String adSoyad;
public void setAdSoyad (String adSoyad) {
this.adSoyad = adSoyad;
}
public String getAdSoyad () {
return adSoyad;
}
}
我的useBean:
<jsp:useBean id="isimBean" class="Bean" scope="session">
<jsp:setProperty name="isimBean" property="adSoyad" value="<%=adsoyad%>" />
</jsp:useBean>
除了Bean,我控制会话并登录
我保留来自此格式的信息
在处理表单的页面中,有bean的getAdSoday方法。
当我测试表单时,getAdsoyad方法给我null。
但是,我在Bean类中更改并保存它,当我重新加载页面时(我只点击f5,我没有输入新数据)getAdsoyad给了我一个结果。
我重新填写表单而没有任何更改,它不起作用,但是当我更改某些内容时,它可以正常工作。
通过改变某些东西,我的意思是我在字母中输入大写等,或者在方法名称中更改get和set变量。
总而言之,它只在我编译bean.java时才起作用。
可能是什么问题?
另外,使用get和set方法名称,允许useBean属性有哪些差异?如果属性是aa,那么set方法是setAA会出现问题吗?
抱歉语言不好,我尽力解释,希望你们理解。 提前谢谢。编辑:
我认为,我的代码并不正确。根据我的知识,bean保存了我发送的信息。我只发送姓名和姓氏信息(姓名=广告,Soyad =姓氏,adSoyad和nameSurname相同)
我的问题是,bean不会保存nameSurname变量。但是当我改变一行bean.java时,bean正常工作。然后我关闭了页面,然后打开,bean再也无法运行了。但我将nameSurname更改为NameSurname,bean正常工作! 我认为,bean类只有在重新编译时才有效。
答案 0 :(得分:0)
首先,您的问题不明确,如果您找到了问题的解决方案,则应将其作为答案发布并接受。
提醒一下,这里有一些信息:
JSP 2.2规范第96和97页指出
(第6步) 如果在指定的作用域中找不到该对象,并且指定的类指定了一个定义公共no-args构造函数的非抽象类,则该类将被实例化。新对象引用与脚本变量相关联,并使用适当的作用域相关关联机制与指定作用域中的指定名称相关联(请参阅PageContext)。此后,执行步骤8。 ..
(步骤8)如果jsp:useBean动作具有非空体,则处理正文。变量初始化并在正文范围内可用。身体的文本被视为其他地方。任何模板文本都将传递到输出流。将评估Scriptlet和动作标签。非空体的常见用法是完成初始化创建的实例。在这种情况下,正文可能包含jsp:setProperty操作和已评估的scriptlet。这样就完成了对useBean操作的处理。
这告诉我们如果没有Bean
类的实例,useBean
标记将为您实例化一个Bean
,并将执行内部setProperty
标记用于将您的属性设置为某个值。
你的第一个问题是你正在使用的Bean
类缺少一个无参数的构造函数,
因此未能遵守JavaBean标准。