2012-02-24 54 views
0

的问题是: 在我的动作类,我有一个变量:Struts的OGNL如果涉及到动作类的变量声明不起作用,

private String commentAdd = "yes"; 

和动作类去reslut.jsp,里面reslut.jsp我有:

<s:set name="allowAddComment" value="commentAdd"/> 
<s:if test="%{#allowAddComment=='yes'}"> 
        <script type="text/javascript"> 
         window.close(); 
        </script> 
</s:if> 

但它不起作用,可以一些专家给我一些建议?谢谢。

回答

1

有几件事。

  • 该属性需要通过公共getter公开(或在更高版本的S2作为公共成员,但更好使用getter)。
  • 为什么使用字符串作为布尔值?只需使用布尔值。
  • 为什么要将属性设置为不同的变量?只需使用该属性。

你是肯定这真的是你想要的吗?随着JavaScript的呈现,这将关闭窗口即将到来。如果没关系,好​​的 - 尽管如此,为什么还要渲染窗口?

+0

谢谢你的建议,我刚看到这篇文章:HTTP://www.mkyong.com/struts2/struts-2-if-elseif-else-tag-example /,并猜测jsp可以获取相关动作类中的变量,即使该变量是私有的?但通过您的意见,似乎问题是jsp无法获得私有变量。我对吗? – user1055108 2012-02-24 15:41:54

+0

@ user1055108该页面具有框架属性的getter。我不明白为什么它使用一个额外的变量;这是毫无意义的。 – 2012-02-24 15:52:13

+0

@戴夫牛顿,这也让我感到困惑。而在jsp中,他们从不调用get方法,struts会调用get方法吗? – user1055108 2012-02-24 16:16:19

0
import com.opensymphony.xwork2.ActionSupport; 

public class PageAction extends ActionSupport { 
private static final long serialVersionUID = 1L; 
private boolean addComment; 

public boolean isAddComment() { 
    return addComment; 
} 

public void setAddComment(boolean addComment) { 
    this.addComment = addComment; 
} 

public String execute() { 
    return SUCCESS; 
} 

}

<s:if test="%{addComment}"> 
<script type="text/javascript"> 
    window.close(); 
</script> 
</s:if> 
+0

我将在哪里执行isAddComment()方法。并且应该 添加一个#:? – user1055108 2012-02-24 16:43:36