我在升级JBOSS(从 4.0.4 GA升级到5.1.0 GA)时遇到很多问题,一个个陷阱掉进去,再爬出来,搞得疲惫不堪。现在又遇到一个问题,请教一下:原先的页面中,比如:
(jsf是netbeans5.5.1中自带的,版本应该是1.2;richfaces是3.1.2 GA)<h:form>
  <h:inputHidden value="#{xxxxx.value}" id="value"></h:inputHidden>在访问时会变转换成
<form id="_id0">
<input id="_id0:value" type="hidden" name="_id0:value" />现在同样的代码会被自动换成:
(jsf是和JBOSS5.1.0 GA自带的一致的1.2.12;richfaces也和JBOSS5.1.0 GA自带的一致3.3.0;不一致就不能启动!)
<form id="j_id_jsp_1505607830_1">
<input id="j_id_jsp_1505607830_1:value" type="hidden" name="j_id_jsp_1505607830_1:value" />
好像还是随机的,每个页面和每个页面都不一样可是页面中有直接访问的代码:document.all("_id0:value").value现在方法之一就是:对于这种要访问标签的页面中的form都命名:<h:form id="_id0">我想问的就是:有什么办法,不做页面的修改,让jsf仍然把<h:form>自动转换成<form id="_id0">谢谢了!

解决方案 »

  1.   

    我猜测,是否有什么配置文件,可以将JSF的from的自动命名的规则指定一下,但是找半天也没有找到。
      

  2.   

    自定义一个组件
    public class _HtmlForm extends HtmlForm {
    //用richfaces的啊,你自己找一下richfaces实现的HtmlForm ,然后继承它    public _HtmlForm () {
            setId("_id0");
        }
    }
    然后把它配置为默认的 HtmlForm    <component>
            <component-type>javax.faces.HtmlForm</component-type>
            <component-class>***._HtmlForm </component-class>
        </component>
      

  3.   


    非常感谢你的回复,通过自定义组件来设置默认名称;这样对于直接指定ID的<H:FORM ID="xxx">应该没有影响吧。另外还有一个问题随便请教一下:是不是richfaces在升级过程中把默认名称由原先的"_id0"改成类似随机生成的了?我学习java+jsp编程不久,这个程序原先也不是我写的,我就担心是不是原先在什么地方调好了,被我整丢了。谢谢!
      

  4.   

    自定义组件不会影响设置的ID。每个JSF都有自己的实现。所以规则可能不一样。
    不过我用JSF的默认实现,ID 和你的第二个 类似 —— j_id_jsp_1310564876_1
    _id0 很大可能是别人设置的。
      

  5.   

    我还是怀疑是jsf版本的问题。感谢提供解决方案。我最终采取笨办法,把所有代码中有_id0的页面都的form的都增加了id。