关于Struts2标签库中<s:if 访问页面变量 如下一个JSP页面代码,先用一个%符定义了一个变量,想用标签库来访问
========================================
<%! int rown = 2; %>
    <s:if test="rown==1">
        <h1>rown的值为1</h1>
    </s:if> 
    <s:elseif test="rown==2">
        <h1>rown的值为2</h1>
    </s:elseif>但上面实际上访问不成功,怎么实现呢? HELP

解决方案 »

  1.   

    这个变量用对象的属性是可以取到值的
    你可以用request.setAttribute()来看看能不能取到值
      

  2.   

    这种方式是可以,标签库默认就是从上下文中取属性
    但为了一个临时变量去上下文中定义也太...
    有没有简单的可直接访问PAGE级变量的标签呢?
      

  3.   

    要比较的值必须放在作用域里,page,request,session...
      

  4.   

    我在网上查了,说这个可以,我也用了
    <s:set name="pagrown" value="rown" scope="page"> </s:set><s:if test="#pagrown==1">
        <h1>rown的值为1 </h1> 
    </s:if> 
    <s:elseif test="#pagrown==2"> 
        <h1>rown的值为2 </h1> 
    </s:elseif> 但测试没有成功,条件返回FALSE;麻烦帮我看看是不是哪写错了?
      

  5.   


    没有解决根本问题,你原来的问题是test无法找到rown的值,
    现在改成:
    <s:set name="pagrown" value="rown" scope="page">  </s:set>
    实际上,还是找不到rown的值,
    这样,你经过这个set后,pagrow的值就等于字符串“rown”,
    也就是说 pagerown=='rown'要实现你的目的,还是要在jsp的java代码里下手:
    <%
    int rown = 2; 
    request.setAttribute("rown",rown);
    %>
        <s:if test="#attr['rown']==1">
            <h1>rown的值为1 </h1>
        </s:if>
        <s:elseif test="#attr['rown']==2">
            <h1>rown的值为2 </h1>
        </s:elseif> 
      

  6.   

    用标签就全用标签 
      <s:set  var="wown"  value="1" >
        <s:if test="rown=1"> 
            <h1>rown的值为1 </h1> 
        </s:if> 
        <s:elseif test="rown==2"> 
            <h1>rown的值为2 </h1> 
        </s:elseif>
     
      

  7.   

    struts2没怎用过
    看来最近要看看了
    关注
      

  8.   

    用<s:set/>标签,不写scope的话,它可以将值写到ognl中的Stack Context
      
    <s:set  var="rown"  value="1" >
        <s:if test="#rown==1">
            <h1>rown的值为1 </h1>
        </s:if>
        <s:elseif test="#rown==2">
            <h1>rown的值为2 </h1>
        </s:elseif>
      

  9.   


        <s:set  name="pagrown" var="rown"  value="2"></s:set>
        <s:if test="#rown==1">
            <h1>rown的值为1 </h1>
        </s:if>
        <s:elseif test="#rown==2">
            <h1>rown的值为2 </h1>
        </s:elseif>就是这样了,楼上的都解出来了,还不行吗?
    注:是rown变量拿去判断,不是 pagrown
      

  10.   

    <s:if test="%{rown==1}">
    </s:if>
    不知道这样行不行
      

  11.   

    我之前用struts1时,都可以标签库和代码混合用着;比如
    <bean:define id="handles" name="handle" scope="request" type="penit.currency.pagination.HandleBean"></bean:define>
    <%
    rows=handles.getRows();
    row=handles.getRow();
    %>
    并可互用的在Struts2中不能吗?对于标签我更认为用它去包装一些模块或者包装WEB控件比较适合;看过ASP。NET中的标签更多的是去包装WEB控件
    对于基本的处理,标签就变得笨拙了;为了追求这种代码的统一不是我目的解决这个问题的方法当然有很多,如 7 8 10 11搂朋友做法都可以
    全采用纯JAVA代码也行
    但我的问题是 Struts2标签库能不能访问页面变量,怎么访问;有没有像struts1中的bean标签那样?
      

  12.   

    楼上的各位set 那有var属性啊。我晕<s:set name="rown" value="2"  ></s:set><s:if test="#rown==1">rown的值为1</s:if>
    <s:elseif test="#rown==2">rown的值为2</s:elseif>不行你杀了我
      

  13.   

    上搂的俺肯定杀不了你
    但您没有了解我的意思,你还是采用标签库定义的变量
    而我想要的是采用<%! int rown = 2; %>定义;我上面有写错误
    这种方式定义的是方法级变量,能否直接让标签库使用呢
    一个非常客观的问题浪费了大家不少时间;先结帖了
    如有哪位知道的请告知一下;定给你发分