1.在eclipse下,开启远程debug模式可在不启动jboss服务器的情况下编辑class并实时生效。
2.使用f:ajax 标签时如果不在<h:commandButton >中指定action,那么<f:ajax excute="somevalue id" render="another value id"/>的执行顺序将是先执行render,然后执行excute
因此需要指定action.
3.通过调试发现,虽然只点击了一次该按钮,但却执行了两次方法。因此在必要时需要加上避免表单重复提交的代码。
4.html5中button默认的类型是submit ,如果需要在表单中作为普通按钮使用须指定type="button"
5.在表格中使用了<ui:repeat>标签,虽然后台数据不为空,但该标签无效。改为<t:dataTable>标签,使用正常。
6.
1.JSF通过ajax传递文本框的值到后台时,后台并没有获取到值,因此在按钮传递ajax事件之前通过js手动赋值,目测是jsf的BUG。
Eg:
function setTitle(){
document.getElementById("ebookTitle").value = document.getElementById("ebookTitle").value;
return true;
}
<h:commandButton id="filter" value="#{msg.BH_Filter}" onclick="return setTitle()"
styleClass="search">
<f:ajax execute="ebookType typeCode eBookTitle searchPanelGroup"
render="eBookHealthcarePanel scrollPanel"
onevent="searchEBookEvent" />
</h:commandButton>
7.apache MyFaces
<t:saveState value=”#{action.property}”/>
作用,可以保存action的属性。在managedBean的声明周期是request的情况下,当一次请求相应结束,那么该managedbean的属性就会清空,如果再次请求该属性,那么就会报空指针异常。使用<t:saveState>标签可以保存想要保存的属性,这在需要重复使用某属性时非常有用。
8.jsf 在managedBean中转发
Eg:"/public/appinfo/index.jsf?platform="+appInfo.getPlatform()+"&faces-redirect=true&includeViewParams=true"
9.地址拼接参数传递到后台 并 保持 状态
<f:metadata>
<f:viewParam name="templateId" value="#{templateAction.templateId}" />
</f:metadata>
<t:saveState value="#{templateAction.templateId}" />
10.从页面提交数据到后台时默认都是String类型提交,如需要绑定其他类型需要添加convert="xxx" 属性,例如:<h:selectManyCheckbox id="xxx" converter="javax.faces.Long" value="#{someBackingBean.xxx}" layout="pagedirection">
11.在后台bean是request的范围的时候,每一次的ajax请求都应当注意请求中所用到的数据是否是空,因为上一次的操作结果默认是不保留的。当数据是空的时候可能会产生不可预知的错误,比如无法发送ajax请求。例如:在某个项目中,我需要更新某条数据,更新之前已经初始化好了一批可选数据,当使用这部分数据时是可以正常提交ajax请求的。但是,如果我按照搜索条件搜索其他的数据之后,再发送更新请求就失败了。因为搜索的业务中,我并没有初始化接收搜索结果的容器。我只在进入编辑页面时初始化了该容器。
12.上一步的ajax请求发生异常--null--接下来的ajax请求无法运作。