小编Jop*_*ops的帖子

JSP标记文件,可以输出其正文或将其返回到变量中

我在".tag"文件中有一个自定义标记,用于计算和输出值.因为我不能在这里发布代码,让我们假设一个简单的例子.

文件内容mytag.tag:

<@tag dynamic-attributes="dynamicParameters">
<%@attribute name="key" required="true"%> <%-- this works fine, in spite of dynamic-attributes --%>
<jsp:doBody var="bodyContent/">
<%-- ... here is some code to compute the value of variable "output" --%>
${output}
Run Code Online (Sandbox Code Playgroud)

调用者可以像这样轻松调用它:

<prefix:mytag key="foo">Body content...</prefix:mytag>
Run Code Online (Sandbox Code Playgroud)

这将插入标签的输出.但我也会让调用者做这样的事情:

<prefix:mytag key="foo" var="mytagOutput">Body content...</prefix:mytag>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出实际上不会被写入,而是分配给变量"mytagOutput",然后调用者可以使用该变量.

我知道调用者可以通过将自定义标记包装在a中来实现这一点c:set,但这并不像简单地声明"var"那样优雅.我也知道用这个@variable指令name-from-attribute可以用来实现这个目的.但是,我不知道调用者是否给出了属性"var".(如果给定,我想分配${output}给该变量,否则我想写出来${output}.)

有没有办法让我知道是否已传入"var"属性?

另一种选择是创建第二个自定义标记,可能称为"getMytag",它始终需要"var"属性并将"mytag"包装在一个中c:set.如果我在这里找不到解决办法,我会为此而努力.

(如果之前已经问过这个问题,请指出.我做了一个快速搜索,但没有找到类似的问题.)

jsp jsp-tags

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

为什么"while((String tmp = x))"不是有效的Java语法?

我对一些Java代码有一个澄清:

这些代码之间的区别是什么,一个可以编译而另一个不能编译.

我对"如何修复错误"不感兴趣,因为我已经解决了它,但更多的是关于这个问题的解释:

工作

public void  x(){
    HashMap<String , Integer> count= new HashMap<String, Integer>();
    Scanner scan= new Scanner("hdsh");

    String tmp;
    while((tmp=scan.next())!=null){
        if(count.containsKey(tmp)){
            count.put(tmp, 1);
        }
        else{
            count.put(tmp, count.get(tmp)+1);
        }
         tmp=scan.next();
    }

}
Run Code Online (Sandbox Code Playgroud)

不工作

public void  x(){
    HashMap<String , Integer> count= new HashMap<String, Integer>();
    Scanner scan= new Scanner("hdsh");

    while((String tmp=scan.next())!=null){
        if(count.containsKey(tmp)){
            count.put(tmp, 1);
        }
        else{
            count.put(tmp, count.get(tmp)+1);
        }
         tmp=scan.next();
    }

}
Run Code Online (Sandbox Code Playgroud)

Eclipse的错误是:

此行有多个标记:

  • 字符串无法解析为变量
  • 令牌"tmp"上的语法错误,删除此令牌
  • 字符串无法解析为变量
  • 令牌"tmp"上的语法错误,删除此令牌

java syntax

8
推荐指数
2
解决办法
405
查看次数

noNamespaceSchemaLocation属性对XML解析有什么影响?

根据定义:

noNamespaceSchemaLocation属性引用没有目标命名空间的XML Schema文档.

这个属性将如何改变解析的结果?

例如,采用这个XML:

<?xml version="1.0"?>
<name
  xmlns="http://www.example.com/name"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.example.com/name schema/schema.xsd"
  title="Mr.">
   <first>John</first>
   <middle>M</middle>
   <last>Doe</last>
</name>
Run Code Online (Sandbox Code Playgroud)

参考这个架构:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.example.com/name"
targetNamespace="http://www.example.com/name" elementFormDefault="qualified">
  <element name="name">
    <complexType>
      <sequence>
        <element name="first" type="string"/>
        <element name="middle" type="string"/>
        <element name="last" type="string"/>
      </sequence>
      <attribute name="title" type="string"/>
    </complexType>
  </element>
</schema>
Run Code Online (Sandbox Code Playgroud)

我从架构中删除了这些命名空间声明:

xmlns:target="http://www.example.com/name" 
targetNamespace="http://www.example.com/name" 
Run Code Online (Sandbox Code Playgroud)

甚至没有在引用XML中使用noNamespaceSchemaLocation属性,也没有抛出任何错误.为什么我们甚至首先需要这个属性?

xml

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

分离并重新连接鼠标滚轮事件侦听器不会重置滚动惯性

我正在使用jquery-mousewheel插件来触发一个函数.

当我调用moveit时,我会分离监听器并等待动画完成,然后重新连接监听器.

问题是当我重新连接它时,鼠标滚轮插件仍在听一些鼠标/触控板的惯性,并反复调用moveit.

我想在我的具体情况下,对函数调用进行去抖动或限制不是好的解决方案,因为惯性仍然存在,并且我还希望立即附加侦听器以用于其他可能的moveit调用.

有没有办法通过完全重置鼠标滚轮事件来"消除惯性",而不是仅仅拆卸它?

$(document).ready(function () {

    var tween;
    var slide = $('#slide');

    function bodyListen () {
        $('body').on('mousewheel.bodyscroll',
        function (e, delta, deltaX, deltaY) {
            e.preventDefault();
            $('body').off('mousewheel.bodyscroll');
            moveit();
        });
    }

    function moveit () {
        tween = TweenMax.to(slide, 0.8, {
            marginLeft: 300,
            onComplete: bodyListen
        });
    }

    bodyListen();
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery mouseevent mousewheel

7
推荐指数
1
解决办法
1327
查看次数

调用函数哪个更好:两次或将结果存储在变量中?

我多次怀疑这个问题,但没有找到正确的解决方案.这次我要清除它.我有情况喜欢

1. 
String sNumber="ksadfl.jksadlf";
if(sNumber.lastIndexOf('.')>0)
   //do something
...
...
if(sNumber.lastIndexOf('.')>1)
 //do something
...

2.
int index = sNumber.lastIndexOf('.');
if(index>0)
//do something
...
...
if(index>1)
//do something
...
Run Code Online (Sandbox Code Playgroud)

第一种方式和第二种方式之间的权衡是什么?哪一个更好地将结果存储在变量中或者调用函数两次?

java variables performance

6
推荐指数
1
解决办法
258
查看次数

Servlet中过滤器的安全性约束优先级

在研究servlet中的安全性约束和过滤器时,我在web.xml文件中做了以下声明,这些声明无法正常工作:

<security-constraint>
    <web-resource-collection>
      <web-resource-name>BeerSelector</web-resource-name>
        <url-pattern>/SelectBeer.do</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
      </web-resource-collection>
     <auth-constraint>
        <role-name>Admin</role-name>
     </auth-constraint>
 </security-constraint>


  <filter>
   <filter-name>LoginFilter</filter-name>
   <filter-class>model.MyFilter</filter-class>
  </filter>


  <filter-mapping>
  <filter-name>LoginFilter</filter-name>
  <url-pattern>/SelectBeer.do</url-pattern>
  </filter-mapping>
Run Code Online (Sandbox Code Playgroud)

根据我读到的内容:在请求到达某个url 之前应该遇到过滤器,那么,为什么首先调用security-constraint呢?

我知道从安全方面来说这是有意义的(要达到你认证的过滤器),但我想知道请求触发序列.

容器是否首先搜索安全资源,从而触发安全约束?

但这与Head First Servlets和Jsp引用的以下段落相矛盾"

请记住,在DD中,是关于请求发生的事情.换句话说,当Container开始查看元素以决定如何响应时,客户端已经发出请求.请求数据已通过网络发送

或者请求只是触发两者:filter和security-constraint,但是安全约束比过滤器更受青睐?

java servlets servlet-filters security-constraint

6
推荐指数
1
解决办法
2749
查看次数

为什么POJO应该是普通的而不是特殊的?

为什么POJO对象不应扩展任何类,实现接口或具有任何注释

java pojo

-1
推荐指数
1
解决办法
335
查看次数