建国's profile小白的生活PhotosBlogLists Tools Help

Blog


    November 19

    MyEclipse6.0下配置WebSphere6.0

    1.安装WebSphere Application Server ND V6.0 WIN C587UML.iso里的WAS下的install.exe进行安装,安装的时候类是Weblogic一样,Websphere里面有一个叫profiles的,类是Weblogic的Domins,用户可以通过开始菜单里的websphere新建profiles,weblogic也可以额,weblogic还多了一个命令行的创建,websphere创建好了以后多了以下一个目录
    C:\WebSphere\AppServer\profiles\TenwaAppServer01\installedApps\AdminNode01Cell
    下面是其中的端口配置图
     
    MyEclipse下的Websphere配置类是如下图,jdk一定要用websphere的,在websphere的java目录下
     
    然后新建立一个web project,然后导出的时候一定要注意,不能采用myeclipse的直接部署,要右几项目,选择 j2ee打包方式,然后再到websphere的控制台区载入该war包,然后保存启动该工程就可以了!
     
    November 13

    JSF经验总结“奇怪问题”(持续补充。。。)

    1.JSF的id号重复问题,将造成其后相同id的组件无法正常执行。
    如:两个<t:dataTable>,除非其 value 属性调用的为同一 Managed Bean 的方法,否则第二个将不会显示任何内容。


    2.JSF中凡具有列表功能的组件,如:<t:dataTable>、<t:selectItems>
    在其 Managed Bean 返回 List 之前,一定要判断此 List 是否为 null,如为 null 则进行取操作。
        public List getRights() {
            if (rightList == null) {
                  rightList = rightService.loadRights();
            }
           
            return rightList;
        }
    这是因为JSF会执行两次Managed Bean的方法,如果此List从数据库中取出,将会占用不必要的系统资源。


    3.如果一个页面中要多次使用同一 Managed Bean 中的同一方法的返回值,且该方法的返回值是从数据库取得的,那么也应像(2)一样判断是否为 null。

    4.很经典的 PropertyNotFoundException 问题
    错误代码如下:
    private SysUser user;
    public SysUser getUser() {...}
    public void setUser(...) {...}

    更正代码如下:
    private SysUser user = new SysUser();
    ...

    5.<h:form>的重要意义
    不多费话,以下引用一段原文:
    Tomahawk 1.1.3 has been released. There is one major change that users will need to be aware of. In order to be compatible with the Reference Implmentation (RI), all command links and components that use command links must now be enclosed within an <h:form> element. This means that components that make use of command links (like tree2) must now be inside an <h:form> in order to work properly. For those using the MyFaces Core JSF implementation, there is a tweak to faces-config.xml that will allow your existing pages to work without changing them.

    接下来说说我碰到的情况(Myfaces1.1.1 & Tomahawk 1.1.3):本人贯用作案手法是 <t: ...>
    a.页面上半部分是一个 <t:dataTable>、中间是一个 <t:selectOneMenu>、下半部分是另一个 <t:dataTable>;
    b.改变中间 <t:selectOneMenu> 的值会触发表单提交来动态改变下半部分 <t:dataTable> 的内容;
    c.起初中间部分和下半部分分别包含在各自的 <h:form> 中,根据“b”步骤操作,结果令人瞠目结舌;
    d.后将上半部分 <t:dataTable> 也包含在一 <h:form> 中问题解决。

    6.value & valueChangeListener
    value & valueChangeListener 属性基本上是个JSF组件就会有!又说费话了。
    valueChangeListener 常用在 <t:selectOneMenu> 这类组件上,用于改变值后提交表单(当然,提交表单要靠JS了)进行页面刷新;其和 Managed Bean 的一个方法进行绑定,表单提交后可通过此方法获得改变后的值,或执行其它方法。
    注意我说的是表单中只有一个 <t:selectOneMenu> 的情况,如果还有提交按钮之类东西的话,我想大多数情况不会这么用了。
    此时切记在如下代码情况下,不要同时使用 value & valueChangeListener:
    private String state;
    public String getState()...
    public void setState()...

    private void doSomething()...
    public void changeState(ValueChangeEvent vce) {
      state = vce.getNewValue();
      doSomething(); // 此方法中用到了变量 state
    }
    此时会存在小小的“冲突”,但足以致命,doSomething()方法中 state 的值变为了 null

    7.<t:commandLink>
    表单中当点击 <t:commandLink> 提交表单并做表单有效性校验(JS)时,如:
    <t:commandLink value="提交" action="#{testHandler.test}" onclick="check();" />

    check() 方法中只可 return false,也即表单内容无效时,而当表单通过验证后切不可 return true,否则表单是无法提交的。因为JSF会为 <t:commandLink> 生成提交表单的 JS,而如果表单验证的 JS 返回了 true,后台的 JS 也就自然没法执行了。。。

    8.你需要用到像 .net 一样的,当页面加载时执行 Managed Bean 中方法的功能吗?
    那么学习一下如何用 http://sourceforge.net/projects/jsf-comp/ 的 On-Load 子项目吧,其它方法只能让你头破血流,还有那丑陋的页面代码!!!