小编SPI*_*984的帖子

jsp:param可以存储一个集合吗?

问候,这是问题所在.我有一个名为entList.jsp的页面,它与集合一起使用:

<c:forEach var = "pack" items = "${packingList}">
<!--Here goes something with outputting the pack instance in a required format-->
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

一切都很好,参数packingList作为请求的属性被调用此页面的动作处理程序传递.实际上,packingList的类型为Collection <GenericBean>.

事实证明,这个页面(它存储的片段)实际上非常有用,并且可以在许多具有不同集合的地方使用.所以我试着像这样包含这个页面(在另一个页面中):

<jsp:include page="entList.jsp">
  <!-- Pass the required collection as a parameter-->
  <jsp:param name = "packingList" value = "${traffic.packingList}"/>
</jsp:include>
Run Code Online (Sandbox Code Playgroud)

但是,现在这个片段没有看到参数packingList.我试着像这样重写片段(因为现在它是一个参数):

<c:forEach var = "pack" items = "${param.packingList}">
<!--Here goes something with outputting the pack instance in a required format-->
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

但现在它会生成异常,因为它将packingList视为字符串而不是集合.所以现在解决方案是这样的 - 在动作处理程序代码中将所需的集合设置为属性:

// This …
Run Code Online (Sandbox Code Playgroud)

jsp

4
推荐指数
1
解决办法
2392
查看次数

log4j是否是线程安全的?

我有一个问题.我们在两个项目中使用log4j,这两个项目托管在同一个GlassFish服务器上.每个项目都有log4j.properties文件,该文件指向基于不同目录的文件(让我们将它们命名为Project1Project2).

现在,由于一些不明原因,有时第一个项目的信息消息被写入Project2日志文件,反之亦然.我检查了两个项目的log4j.properties文件,没有任何内容指向其他项目的日志.

怀疑是log4j实际上并不是线程安全的,因此如果两个用户同时在两个系统中工作,则记录器的消息可能会混合在一起.这种猜疑是否正确?

log4j thread-safety

4
推荐指数
1
解决办法
7309
查看次数

如果传递给jsp页面,内部类的实例会发生什么

我有一个问题,这对我来说很有意义.假设我有这样一个类定义:

public class A extends DumbAction{
  public class B {
    // Inner class definition
    public String getName() {return "Class B";}
  }

  @Override 
  public void execute(HttpServletRequest request) {
    ArrayList<B> list = new ArrayList<B>();
    list.add(new B());
    // Here I add some more elements
    request.setAttribute("list", list);      
  }
}
Run Code Online (Sandbox Code Playgroud)

似乎编译器不禁止这样的代码.因此,我向HttpServletRequest实例传递了一个内部类实例列表.但是,然后我尝试在JSP中访问他们的公共方法,我抱怨这样的读取方法(例如,getName)不存在的事实.虽然物体本身似乎存在.

这是什么意思?内部类甚至不能隐含地传递给外界?或者他们的生命会立即结束,因为外部类实例会停止存在?或者除了外部类之外,没有人可以访问内部类的公共方法.

Upd:这是jsp页面的片段,它使用内部类的实例列表:

<c:forEach var = "element" items = "${list}">
  <c:out value = "${element.name}"/><br/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

似乎forEach工作正常,但是根据JSTL out不能访问内部类的公共方法getName().

java inner-classes

4
推荐指数
1
解决办法
1137
查看次数

try-catch-finally vs抽象方法

在我们的系统中,我们有一个抽象类,我们称之为BasicAction,它包含几个抽象方法.其中最重要的是执行.它处理来自JSP页面的请求.主处理程序的工作方式如下:

// Sample 1: 
String actionName;// The name of action to use
Map<String, BasicAction> mapping;//The mapping of names and actual handlers

BasicAction action = mapping.get(actionName);

try {
  action.execute(request);//Handle the http request from the JSP page
} catch (Exception ex) {
  // Handle here any exceptions
}
Run Code Online (Sandbox Code Playgroud)

现在,一切看起来都很好,但基本上所有派生的处理程序都实现了相同的代码:

// Sample 1: 
public class ConcreteAction extends BasicAction {
  @Override
  public void execute(HttpServletRequest request) {
    // The managers provide the middle layer between 
    // web presentation and database
    TrafficManager …
Run Code Online (Sandbox Code Playgroud)

java try-catch-finally

3
推荐指数
1
解决办法
1025
查看次数

Mercurial变化的传播

我有一个问题.假设我有一堆托管形成层次结构的存储库,例如:A - > B - > C(意思是A是中央存储库,其余的都是它的后代).

现在假设我使用C的克隆.假设我想要不仅从C获得更改,而且从中央存储库获取更改,因此我执行以下命令:

hg pull [Address of A]
hg up
Run Code Online (Sandbox Code Playgroud)

这似乎是完全合法的,但是发生了什么然后我提交我的更改并将它们推送到C?不仅会推送我的本地修改,还会修改中央存储库(如果有的话).如果有人试图将变化从A拉到C,会发生什么?是否会发生冲突或者它会成功合并更改A - > local - > C并更改A - > C. Mercurial会将其识别为相同的变更集吗?

如果我确定我的代码足够稳定并且可以放在中央存储库中,则会发生相同的情况:

hg commit -u spirit -m "A local modification that is stable"
hg push [Address of A]
Run Code Online (Sandbox Code Playgroud)

如果我从A拉到C然后再从C拉到我的本地仓库会发生什么,它会识别这些变更集来自我的本地仓库,还是会报告冲突并建议合并?

那个案子中最好的做法是什么?仅执行后续的拉动和推动(即A < - > B,B < - > C,C < - >本地)?但问题是我只能访问我的本地存储库,它是C的克隆.如果我想要在我的本地机器上,如何从B到C的拉?Mercurial如何处理

version-control mercurial

3
推荐指数
1
解决办法
104
查看次数

降低代码的复杂性

我现在卡在一些非常奇怪的类中,这些类逻辑混乱了.以下是为数据库生成查询的代码示例:

if(realTraffic.getPvkp() != null) {
   //Admission point
   if(BeanUtils.isGuidEntity(realTraffic.getPvkp())) {
      findParameters +=
         " and (" + staticTableName() + ".guidPvkp = '" + realTraffic.getPvkp().getGuid()
         + "' or (" + staticTableName() + ".guidPvkpOut = '" + realTraffic.getPvkp().getGuid()
         + "' and " + staticTableName() + ".requestType = " + RequestBean.TRANSIT_TYPE
         + ")";
      if (companyType == CompanyBean.PP_TYPE && !realTraffic.isSkipOther()) {
         // TODO - add non-formed
         findParameters += " or (" + staticTableName() + ".guidPvkpOut is null "
         + " and " + staticTableName() + ".requestType …
Run Code Online (Sandbox Code Playgroud)

java refactoring anti-patterns

3
推荐指数
1
解决办法
946
查看次数

什么是空集合的连接结果

我想知道,如果给出一个空集合,Joiner.join究竟会如何表现:

Joiner.on(",").join(new ArrayList());
Run Code Online (Sandbox Code Playgroud)

我想知道,这里的预期行为是什么.它会返回一个空字符串还是null?或者它取决于库的平台和实现?

guava

3
推荐指数
1
解决办法
1458
查看次数

在同一台服务器上提供多个mercurial存储库

我有一个问题.我们目前正在尝试为我们的开发选择合适的结构.我们要努力实现的目标如下:

  • 我们在Mercurial有一个中央存储库 - 我们称之为A.
  • Mercurial中还有一些存储库,它们是A的存储库 - 存储库B,C和D(对于每个开发人员).
  • 这些存储库中的每一个都有一个钩子将它绑定到Hudson.
  • Hudson有几个工作(对于每个开发人员) - 它生成一个构建并将其部署在目录中的测试服务器上,用于推动它自己的存储库的具体开发人员.
  • 因此,每个开发人员都可以使用自己的存储库,并在一周内只推送一次中央存储库.

问题是如何在单个服务器上托管所有这些存储库.我想要的东西:

通过这种方式,我可以在Hudson中为每个存储库创建脚本,这样一个开发人员的工作就不会以任何方式影响另一个,EAR的测试也不会重叠,因为每个开发人员都会生成并部署自己的EAR.

UPD.感谢大家的回答.现在我们使用以下结构.

  • 中央存储库使用hg serve命令托管在8000端口.
  • 至于个人开发人员存储库,它们是通过从中央存储库克隆然后在hgweb.cgi的帮助下托管在8001端口上创建的(观看本教程).

mercurial

2
推荐指数
1
解决办法
211
查看次数

为什么这段代码需要如此多的内存

我目前正试图在其中一个在线编程竞赛中解决问题.该比赛的限制为64兆字节.

我用Java编写了一个程序,它在类声明中有一段字段,其工作方式如下:

private int[] sizes = new int[1024]; // 4096 bytes
private boolean[][] compat = new boolean[1024][1024]; // 128 kb
private boolean[][] compat2 = new boolean[1024][1024]; // 128 kb

private long[][][] dp = new long[29000][51][2]; // About 3*8 = 24 megabytes
private int [][] masks  = new int[29000][2]; // About 240 kb
private int avail = 0; 
private int avail2 = 0;
private int[] positions = new int[500000]; // About 2 megabytes
private int[][] ranges = new int[29000][2]; // About …
Run Code Online (Sandbox Code Playgroud)

java out-of-memory

2
推荐指数
1
解决办法
247
查看次数

长方法是坏事吗?

据我所知,包含长序列操作的方法被认为是一件坏事,需要重新设计.更重要的是,我听到一种观点认为该方法不应该大于屏幕(即所有方法代码应该立即在IDE屏幕中可见,而不需要滚动).

关于这个有什么一般规则吗?例如,"如果方法超过15行,则应该重构"?如果是这样,你如何重构它?只是使用提取方法的方式?

refactoring design-patterns

2
推荐指数
1
解决办法
430
查看次数